diff --git a/v3/tasks/20250605-v3-weighted-lp-oracle/artifact/WeightedLPOracleFactory.json b/v3/tasks/20250605-v3-weighted-lp-oracle/artifact/WeightedLPOracleFactory.json new file mode 100644 index 000000000..29cad55c6 --- /dev/null +++ b/v3/tasks/20250605-v3-weighted-lp-oracle/artifact/WeightedLPOracleFactory.json @@ -0,0 +1,150 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "WeightedLPOracleFactory", + "sourceName": "contracts/WeightedLPOracleFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "uint256", + "name": "oracleVersion", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "VaultNotSet", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IWeightedPool", + "name": "pool", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IWeightedLPOracle", + "name": "oracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oracleVersion", + "type": "uint256" + } + ], + "name": "WeightedLPOracleCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract IWeightedPool", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract AggregatorV3Interface[]", + "name": "feeds", + "type": "address[]" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "contract IWeightedLPOracle", + "name": "oracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IWeightedPool", + "name": "pool", + "type": "address" + } + ], + "name": "getOracle", + "outputs": [ + { + "internalType": "contract IWeightedLPOracle", + "name": "oracle", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60c0346100a257601f612ef638819003918201601f19168301916001600160401b038311848410176100a65780849260409485528339810103126100a25780516001600160a01b038116918282036100a257602001519130608052156100935760a0525f55604051612e3b90816100bb82396080518161063d015260a0518181816101190152818161043801526104c90152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049081361015610015575f80fd5b5f35928360e01c90816310d3d22e1461053d57508063851c1bb3146104ed5780638d928af81461049d578063aaabadc5146103e45763cd1d977614610058575f80fd5b3461033c578060031936011261033c57610070610581565b602480359467ffffffffffffffff9485871161033c573660238801121561033c5786810135958087116103b9578660051b926020988751986100b48b87018b6105a4565b89528989018681968301019136831161033c578701905b82821061038d575050507fffffffff000000000000000000000000000000000000000000000000000000006101009116610612565b73ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016918851907faaabadc50000000000000000000000000000000000000000000000000000000082528b828781875afa91821561038357918c918a935f92610351575b506064908c5194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528b840152338d840152306044840152165afa908115610347575f9161030d575b50156102e6575f54938851966127519182890195898710908711176102bc57505086959493929188916106b58839608084019284521698898b8401526080898401525180915260a0820193905f5b8b8282106102a357505050506060015203905ff08015610299571691805f5260018452815f20837fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557ffe0fe762010efd636b9d44c1b529d2343a72d14538bd28a5a873e29e5e8956f2825f5481519086825287820152a251908152f35b82513d5f823e3d90fd5b83518a1687528897509586019590920191600101610216565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b837f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508a81813d8311610340575b61032481836105a4565b8101031261033c5751801515810361033c575f6101c8565b5f80fd5b503d61031a565b89513d5f823e3d90fd5b606491925061037590843d861161037c575b61036d81836105a4565b810190610688565b919061017a565b503d610363565b8a513d5f823e3d90fd5b813573ffffffffffffffffffffffffffffffffffffffff8116810361033c578152908b01908b016100cb565b836041837f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50903461033c575f60031936011261033c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561049357926020935f93610474575b505191168152f35b61048c919350843d861161037c5761036d81836105a4565b918461046c565b83513d5f823e3d90fd5b503461033c575f60031936011261033c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50903461033c57602060031936011261033c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361033c57610536602092610612565b9051908152f35b90503461033c57602060031936011261033c5760209173ffffffffffffffffffffffffffffffffffffffff9081610572610581565b165f52600184525f2054168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176105e55760405251902090565b9081602091031261033c575173ffffffffffffffffffffffffffffffffffffffff8116810361033c579056fe6104006040908082523461066757612751803803809161001f82856107bf565b833981016080828203126106675781516001600160a01b0392838216918281036106675760209586830151968688169788810361066757848301516001600160401b03919082811161066757860194601f96898888011215610667578651996100878b6107f6565b976100948851998a6107bf565b8b8952868901908760059d8e1b820101928311610667578701905b8282106107a7575050506060015160c05260805260a05282519863ca4f280360e01b8a525f8a60248160049a858c8301525afa998a15610710575f9a61071a575b50985f8798999a85519889809263f89f27ed60e01b82525afa968715610710575f97610688575b5051948560e052875f8b60a051168651928380926395d89b4160e01b82525afa90811561067e579084915f916105eb575b5060246101799187519381859251918291018984015e8101630bd554d160e21b88820152038b8101845201826107bf565b80519283116105d8575f54936001948581811c911680156105ce575b828210146105bb57838111610579575b508092841160011461051757509282939183925f9461050c575b50501b915f199060031b1c1916175f555b815183036104fe57866101e28361080d565b5116916102009283526101f48561080d565b5197610100988952610210816102098461080d565b511661089f565b956103009687526007826102238561082e565b5116966102209788526102358361082e565b519a6101209b8c5261024a856102098861082e565b9a6103209b8c52600283116104ca575b60038311610496575b8211610462575b811161042e575b600681116103fa575b116103c4575b5050505194611df09687610961883960805187818161012601526108ab015260a0518781816101000152818161068e0152610850015260c05187610558015260e05187818161027a0152818161036f015281816106400152818161080e0152610b6101525186610db501525185610de001526101405185610e1401526101605185610e4801526101805185610e7c01526101a05185610eb001526101c05185610ee701526101e05185610f1a0152518461109c015251836110c901526102405183611100015261026051836111370152610280518361116e01526102a051836111a501526102c051836111e001526102e051836112170152518261124d01525181611278015261034051816112ac015261036051816112e00152610380518161131401526103a0518161134801526103c0518161137f01526103e051816113b20152f35b826103e461020992846103d96103ee9761088e565b51166102e05261088e565b516101e05261088e565b6103e0525f8080610280565b836104048661087e565b51166102c0526104138361087e565b516101c052610425846102098761087e565b6103c05261027a565b836104388661086e565b51166102a0526104478361086e565b516101a052610459846102098761086e565b6103a052610271565b8461046c8761085e565b51166102805261047b8461085e565b516101805261048d856102098861085e565b6103805261026a565b856104a08861084e565b5116610260526104af8561084e565b51610160526104c1866102098961084e565b61036052610263565b856104d48861083e565b5116610240526104e38561083e565b51610140526104f5866102098961083e565b6103405261025a565b8463aaad13f760e01b5f525ffd5b015192505f806101bf565b919083601f1981165f8052845f20945f905b8883831061055f5750505010610547575b505050811b015f556101d0565b01515f1960f88460031b161c191690555f808061053a565b858701518855909601959485019487935090810190610529565b5f8052815f20848d818801901c8201928488106105b2575b018d1c019086905b8281106105a75750506101a5565b5f8155018690610599565b92508192610591565b60228b634e487b7160e01b5f525260245ffd5b90607f1690610195565b604189634e487b7160e01b5f525260245ffd5b9150503d805f833e6105fd81836107bf565b81019084818303126106675780519084821161066757018183820112156106675780519084821161066b5786519261063d838601601f19168801856107bf565b8284528683830101116106675785925f84846101799582602496018386015e830101529150610148565b5f80fd5b60418b634e487b7160e01b5f525260245ffd5b85513d5f823e3d90fd5b9096503d805f833e61069a81836107bf565b8101908381830312610667578051908382116106675701908087830112156106675781516106c7816107f6565b926106d4875194856107bf565b81845285808501928d1b8201019283116106675785809101915b8383106107005750505050955f610117565b82518152918101918691016106ee565b84513d5f823e3d90fd5b99503d805f8c3e61072b818c6107bf565b8a019983818c03126106675780519083821161066757019980878c011215610667578a51610758816107f6565b9b858088519e8f9061076a90826107bf565b84815201928c1b820101928311610667578501905b82821061078f575050505f6100f0565b81518c8116810361066757815290850190850161077f565b8151808f1681036106675781529087019087016100af565b601f909101601f19168101906001600160401b038211908210176107e257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116107e25760051b60200190565b80511561081a5760200190565b634e487b7160e01b5f52603260045260245ffd5b80516001101561081a5760400190565b80516002101561081a5760600190565b80516003101561081a5760800190565b80516004101561081a5760a00190565b80516005101561081a5760c00190565b80516006101561081a5760e00190565b80516007101561081a576101000190565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015610955575f90610918575b60ff9150166012811161090957601203601281116108f557604d81116108f557600a0a90565b634e487b7160e01b5f52601160045260245ffd5b636a78e98160e11b5f5260045ffd5b506020813d60201161094d575b81610932602093836107bf565b81010312610667575160ff811681036106675760ff906108cf565b3d9150610925565b6040513d5f823e3d90fdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146106645750806322acb86714610626578063313ce5671461060b57806347bcac3b1461057b57806354fd4d50146105415780637284e416146103ed5780637fe955d4146103595780639a6fc8f514610312578063af1296d3146102b5578063cd2c9e70146102605763feaf968c14610098575f80fd5b3461024a575f60031936011261024a576100bc60246100b5610b5f565b929061080c565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610256575f9261021e575b5081156101f857670de0b6b3a7640000948581029581870414901517156101cc57506101b08460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026113da565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d60201161024e575b8161023a602093836106e5565b8101031261024a5751905f610156565b5f80fd5b3d915061022d565b84513d5f823e3d90fd5b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000611241565b90519182916020835260208301906106b2565b0390f35b503461024a575f60031936011261024a576102ce610b5f565b91805191818301918352805180925260608301916020809201915f5b8281106102fe578580868960208301520390f35b8351855293810193928101926001016102ea565b50903461024a57602060031936011261024a573569ffffffffffffffffffff81160361024a57805f60a09251918183528160208401528201525f60608201525f6080820152f35b503461024a575f60031936011261024a576103937f000000000000000000000000000000000000000000000000000000000000000061104c565b908051918291602090602080850191818652845180935285019301915f5b8281106103c057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016103b1565b503461024a575f60031936011261024a5780515f5f549060018260011c9060018416938415610537575b602097888410861461050b57509187918694938286528386019690815f146104d1575060011461047b575b50505091610457601f92601f199403856106e5565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104bb575050508201018582601f19610442565b80548885018601528795509284019281016104a4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610442565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610417565b503461024a575f60031936011261024a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461024a5760208060031936011261024a5782359267ffffffffffffffff841161024a573660238501121561024a57830135926105b884610735565b936105c5845195866106e5565b8085526024602086019160051b8301019136831161024a57602401905b8282106105fc576020856105f58861080c565b9051908152f35b813581529083019083016105e2565b503461024a575f60031936011261024a576020905160128152f35b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000610da9565b3461024a575f60031936011261024a5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106106d1575050505090565b8351855293810193928101926001016106c3565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116107085760051b60200190565b80511561075a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561075a5760400190565b80516002101561075a5760600190565b80516003101561075a5760800190565b80516004101561075a5760a00190565b80516005101561075a5760c00190565b80516006101561075a5760e00190565b80516007101561075a576101000190565b805182101561075a5760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061083782610da9565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b3e575f91610aac575b5060209061091d92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906106b2565b5f602483015203915afa968715610aa357505f96610a6f575b5093929190670de0b6b3a7640000945f945b84861061096c57505050505050670de0b6b3a76400009161096891610f4a565b0490565b90919293949561097c87836107f8565b515f8112610a455761098e88856107f8565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610a1a5780156109ef576001926109dc670de0b6b3a7640000936109e2936109d48d8a6107f8565b519104610f8a565b90610f4a565b0496019493929190610948565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610a9b575b81610a8b602093836106e5565b8101031261024a5751945f610936565b3d9150610a7e565b513d5f823e3d90fd5b90503d805f833e610abd81836106e5565b810190602090818184031261024a5780519067ffffffffffffffff821161024a57019180601f8401121561024a578251610af681610735565b93610b038c5195866106e5565b818552838086019260051b82010192831161024a578301905b828210610b2f575050505061091d6108db565b81518152908301908301610b1c565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361024a57565b7f000000000000000000000000000000000000000000000000000000000000000090610b8a8261104c565b90610b9483611241565b91610b9e84610735565b604094610bae60405192836106e5565b808252610bba81610735565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610bfe5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610c248a846107f8565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610d6e575f925f94610d16575b5050610c7f610c798d886107f8565b516113da565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610cea5781840514901517156101cc57509060019291610ccb8c8b6107f8565b5280821015610ce357505b9801959493929190610bee565b9050610cd6565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610d67575b610d2f81836106e5565b8101031261024a57610d4081610b48565b9187820151918781015192610d5c608060608401519301610b48565b94509250925f610c6a565b503d610d25565b87513d5f823e3d90fd5b90610d8282610735565b610d8f60405191826106e5565b828152601f19610d9f8294610735565b0190602036910137565b610db281610d78565b907f0000000000000000000000000000000000000000000000000000000000000000610ddd8361074d565b527f0000000000000000000000000000000000000000000000000000000000000000610e0883610787565b526002811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e3c83610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e70836107a7565b526004811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ea4836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ed8836107c7565b526006811115610f46576007907f0000000000000000000000000000000000000000000000000000000000000000610f0f846107d7565b5211610f185790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b5290565b5090565b81810292918115918404141715610f5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a764000091808303610fa15750905090565b8290671bc16d674ec800008103610fbe5750508061096891610f4a565b673782dace9d9000008103610fe25750610fdb8261096893610f4a565b0480610f4a565b9050610fed91611480565b612710808202908282041482151715610f5d5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff938483010401901515029060018201808311610f5d57811015611047575050505f90565b030190565b61105581610735565b9061106360405192836106e5565b808252601f1961107282610735565b013660208401376110828261074d565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526110c783610787565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561123c576110fe83610797565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561123c57611135836107a7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561123c5761116c836107b7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561123c576111a3836107c7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561123c576007906111dd846107d7565b837f00000000000000000000000000000000000000000000000000000000000000001690521161120b575090565b611214826107e7565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61124a81610d78565b907f00000000000000000000000000000000000000000000000000000000000000006112758361074d565b527f00000000000000000000000000000000000000000000000000000000000000006112a083610787565b526002811115610f46577f00000000000000000000000000000000000000000000000000000000000000006112d483610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611308836107a7565b526004811115610f46577f000000000000000000000000000000000000000000000000000000000000000061133c836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611370836107c7565b526006811115610f46576007907f00000000000000000000000000000000000000000000000000000000000000006113a7846107d7565b52116113b05790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116114045790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611449576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611449570590565b908015611dac578115611da6578160ff1c611d7e57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611d565781670c7d713b49da00001280611d45575b156119e257670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611519908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611476565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806119cf575b156119a757819082121580611994575b1561196c575f915f811261195d575b506064906806f05b59d3b200000081126118fa577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156118c1575b6856bc75e2d631000000811215611887575b682b5e3af16b1880000081121561184f575b6815af1d78b58c400000811215611817575b680ad78ebc5ac62000008112156117e0575b828112156117a9575b6802b5e3af16b1880000811215611772575b68015af1d78b58c4000081121561173b575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611738576117389061142f565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906116b9565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906116a7565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611695565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061168c565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061167a565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611668565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611656565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611644565b6803782dace9d9000000811261194a577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261162f565b68056bc75e2d631000008260019261162f565b600192505f03905060646115d3565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115c4565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115b4565b81670de0b6b3a7640000925f91848112611d2f575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d04575b73011798004d755d3c8bc8e03204cf44619e000000821215611ce3575b820290808302906e01855144814a7ff805980ff00840009081831215611cc0575b50506b02df0ab5a80a22c61ab5a70080821215611ca0575b50693f1fce3da636ea5cf85080821215611c80575b50690127fa27722cc06cc5e280821215611c60575b5068280e60114edb805d0380821215611c40575b50680ebc5fb4174612111080821215611c29575b506808f00f760a4b2db55d80821215611c09575b506806f5f177578893793780821215611be9575b506806248f33704b28660380821215611bca575b506805c548670b9510e7ac80821215611bab575b50611b5868056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611476565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611ba6575f035b02611588565b611ba0565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b1c565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b08565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611af4565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611ae0565b68056bc75e2d63100000809202059101905f611acc565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611ab8565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611aa4565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611a8f565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611a7a565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611a62565b906b1425982cf597cd205cef73806803782dace9d900000091059101611a41565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a24565b9050611d3b915061142f565b60019060646119f7565b50670f43fc2c04ee000082126114c6565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220659c979dfe41d02b29882b7d46ec0a2e92eadb9c4641e40f6c89f036fb5a967b64736f6c634300081b0033a26469706673582212208d8af8eb1f4e81bf0d263eaa3254924e6e0cb2db28818649a5edb0f6ed5e1eef64736f6c634300081b0033", + "deployedBytecode": "0x6080604081815260049081361015610015575f80fd5b5f35928360e01c90816310d3d22e1461053d57508063851c1bb3146104ed5780638d928af81461049d578063aaabadc5146103e45763cd1d977614610058575f80fd5b3461033c578060031936011261033c57610070610581565b602480359467ffffffffffffffff9485871161033c573660238801121561033c5786810135958087116103b9578660051b926020988751986100b48b87018b6105a4565b89528989018681968301019136831161033c578701905b82821061038d575050507fffffffff000000000000000000000000000000000000000000000000000000006101009116610612565b73ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016918851907faaabadc50000000000000000000000000000000000000000000000000000000082528b828781875afa91821561038357918c918a935f92610351575b506064908c5194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528b840152338d840152306044840152165afa908115610347575f9161030d575b50156102e6575f54938851966127519182890195898710908711176102bc57505086959493929188916106b58839608084019284521698898b8401526080898401525180915260a0820193905f5b8b8282106102a357505050506060015203905ff08015610299571691805f5260018452815f20837fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557ffe0fe762010efd636b9d44c1b529d2343a72d14538bd28a5a873e29e5e8956f2825f5481519086825287820152a251908152f35b82513d5f823e3d90fd5b83518a1687528897509586019590920191600101610216565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b837f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508a81813d8311610340575b61032481836105a4565b8101031261033c5751801515810361033c575f6101c8565b5f80fd5b503d61031a565b89513d5f823e3d90fd5b606491925061037590843d861161037c575b61036d81836105a4565b810190610688565b919061017a565b503d610363565b8a513d5f823e3d90fd5b813573ffffffffffffffffffffffffffffffffffffffff8116810361033c578152908b01908b016100cb565b836041837f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50903461033c575f60031936011261033c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561049357926020935f93610474575b505191168152f35b61048c919350843d861161037c5761036d81836105a4565b918461046c565b83513d5f823e3d90fd5b503461033c575f60031936011261033c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50903461033c57602060031936011261033c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361033c57610536602092610612565b9051908152f35b90503461033c57602060031936011261033c5760209173ffffffffffffffffffffffffffffffffffffffff9081610572610581565b165f52600184525f2054168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176105e55760405251902090565b9081602091031261033c575173ffffffffffffffffffffffffffffffffffffffff8116810361033c579056fe6104006040908082523461066757612751803803809161001f82856107bf565b833981016080828203126106675781516001600160a01b0392838216918281036106675760209586830151968688169788810361066757848301516001600160401b03919082811161066757860194601f96898888011215610667578651996100878b6107f6565b976100948851998a6107bf565b8b8952868901908760059d8e1b820101928311610667578701905b8282106107a7575050506060015160c05260805260a05282519863ca4f280360e01b8a525f8a60248160049a858c8301525afa998a15610710575f9a61071a575b50985f8798999a85519889809263f89f27ed60e01b82525afa968715610710575f97610688575b5051948560e052875f8b60a051168651928380926395d89b4160e01b82525afa90811561067e579084915f916105eb575b5060246101799187519381859251918291018984015e8101630bd554d160e21b88820152038b8101845201826107bf565b80519283116105d8575f54936001948581811c911680156105ce575b828210146105bb57838111610579575b508092841160011461051757509282939183925f9461050c575b50501b915f199060031b1c1916175f555b815183036104fe57866101e28361080d565b5116916102009283526101f48561080d565b5197610100988952610210816102098461080d565b511661089f565b956103009687526007826102238561082e565b5116966102209788526102358361082e565b519a6101209b8c5261024a856102098861082e565b9a6103209b8c52600283116104ca575b60038311610496575b8211610462575b811161042e575b600681116103fa575b116103c4575b5050505194611df09687610961883960805187818161012601526108ab015260a0518781816101000152818161068e0152610850015260c05187610558015260e05187818161027a0152818161036f015281816106400152818161080e0152610b6101525186610db501525185610de001526101405185610e1401526101605185610e4801526101805185610e7c01526101a05185610eb001526101c05185610ee701526101e05185610f1a0152518461109c015251836110c901526102405183611100015261026051836111370152610280518361116e01526102a051836111a501526102c051836111e001526102e051836112170152518261124d01525181611278015261034051816112ac015261036051816112e00152610380518161131401526103a0518161134801526103c0518161137f01526103e051816113b20152f35b826103e461020992846103d96103ee9761088e565b51166102e05261088e565b516101e05261088e565b6103e0525f8080610280565b836104048661087e565b51166102c0526104138361087e565b516101c052610425846102098761087e565b6103c05261027a565b836104388661086e565b51166102a0526104478361086e565b516101a052610459846102098761086e565b6103a052610271565b8461046c8761085e565b51166102805261047b8461085e565b516101805261048d856102098861085e565b6103805261026a565b856104a08861084e565b5116610260526104af8561084e565b51610160526104c1866102098961084e565b61036052610263565b856104d48861083e565b5116610240526104e38561083e565b51610140526104f5866102098961083e565b6103405261025a565b8463aaad13f760e01b5f525ffd5b015192505f806101bf565b919083601f1981165f8052845f20945f905b8883831061055f5750505010610547575b505050811b015f556101d0565b01515f1960f88460031b161c191690555f808061053a565b858701518855909601959485019487935090810190610529565b5f8052815f20848d818801901c8201928488106105b2575b018d1c019086905b8281106105a75750506101a5565b5f8155018690610599565b92508192610591565b60228b634e487b7160e01b5f525260245ffd5b90607f1690610195565b604189634e487b7160e01b5f525260245ffd5b9150503d805f833e6105fd81836107bf565b81019084818303126106675780519084821161066757018183820112156106675780519084821161066b5786519261063d838601601f19168801856107bf565b8284528683830101116106675785925f84846101799582602496018386015e830101529150610148565b5f80fd5b60418b634e487b7160e01b5f525260245ffd5b85513d5f823e3d90fd5b9096503d805f833e61069a81836107bf565b8101908381830312610667578051908382116106675701908087830112156106675781516106c7816107f6565b926106d4875194856107bf565b81845285808501928d1b8201019283116106675785809101915b8383106107005750505050955f610117565b82518152918101918691016106ee565b84513d5f823e3d90fd5b99503d805f8c3e61072b818c6107bf565b8a019983818c03126106675780519083821161066757019980878c011215610667578a51610758816107f6565b9b858088519e8f9061076a90826107bf565b84815201928c1b820101928311610667578501905b82821061078f575050505f6100f0565b81518c8116810361066757815290850190850161077f565b8151808f1681036106675781529087019087016100af565b601f909101601f19168101906001600160401b038211908210176107e257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116107e25760051b60200190565b80511561081a5760200190565b634e487b7160e01b5f52603260045260245ffd5b80516001101561081a5760400190565b80516002101561081a5760600190565b80516003101561081a5760800190565b80516004101561081a5760a00190565b80516005101561081a5760c00190565b80516006101561081a5760e00190565b80516007101561081a576101000190565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015610955575f90610918575b60ff9150166012811161090957601203601281116108f557604d81116108f557600a0a90565b634e487b7160e01b5f52601160045260245ffd5b636a78e98160e11b5f5260045ffd5b506020813d60201161094d575b81610932602093836107bf565b81010312610667575160ff811681036106675760ff906108cf565b3d9150610925565b6040513d5f823e3d90fdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146106645750806322acb86714610626578063313ce5671461060b57806347bcac3b1461057b57806354fd4d50146105415780637284e416146103ed5780637fe955d4146103595780639a6fc8f514610312578063af1296d3146102b5578063cd2c9e70146102605763feaf968c14610098575f80fd5b3461024a575f60031936011261024a576100bc60246100b5610b5f565b929061080c565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610256575f9261021e575b5081156101f857670de0b6b3a7640000948581029581870414901517156101cc57506101b08460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026113da565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d60201161024e575b8161023a602093836106e5565b8101031261024a5751905f610156565b5f80fd5b3d915061022d565b84513d5f823e3d90fd5b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000611241565b90519182916020835260208301906106b2565b0390f35b503461024a575f60031936011261024a576102ce610b5f565b91805191818301918352805180925260608301916020809201915f5b8281106102fe578580868960208301520390f35b8351855293810193928101926001016102ea565b50903461024a57602060031936011261024a573569ffffffffffffffffffff81160361024a57805f60a09251918183528160208401528201525f60608201525f6080820152f35b503461024a575f60031936011261024a576103937f000000000000000000000000000000000000000000000000000000000000000061104c565b908051918291602090602080850191818652845180935285019301915f5b8281106103c057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016103b1565b503461024a575f60031936011261024a5780515f5f549060018260011c9060018416938415610537575b602097888410861461050b57509187918694938286528386019690815f146104d1575060011461047b575b50505091610457601f92601f199403856106e5565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104bb575050508201018582601f19610442565b80548885018601528795509284019281016104a4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610442565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610417565b503461024a575f60031936011261024a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461024a5760208060031936011261024a5782359267ffffffffffffffff841161024a573660238501121561024a57830135926105b884610735565b936105c5845195866106e5565b8085526024602086019160051b8301019136831161024a57602401905b8282106105fc576020856105f58861080c565b9051908152f35b813581529083019083016105e2565b503461024a575f60031936011261024a576020905160128152f35b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000610da9565b3461024a575f60031936011261024a5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106106d1575050505090565b8351855293810193928101926001016106c3565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116107085760051b60200190565b80511561075a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561075a5760400190565b80516002101561075a5760600190565b80516003101561075a5760800190565b80516004101561075a5760a00190565b80516005101561075a5760c00190565b80516006101561075a5760e00190565b80516007101561075a576101000190565b805182101561075a5760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061083782610da9565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b3e575f91610aac575b5060209061091d92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906106b2565b5f602483015203915afa968715610aa357505f96610a6f575b5093929190670de0b6b3a7640000945f945b84861061096c57505050505050670de0b6b3a76400009161096891610f4a565b0490565b90919293949561097c87836107f8565b515f8112610a455761098e88856107f8565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610a1a5780156109ef576001926109dc670de0b6b3a7640000936109e2936109d48d8a6107f8565b519104610f8a565b90610f4a565b0496019493929190610948565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610a9b575b81610a8b602093836106e5565b8101031261024a5751945f610936565b3d9150610a7e565b513d5f823e3d90fd5b90503d805f833e610abd81836106e5565b810190602090818184031261024a5780519067ffffffffffffffff821161024a57019180601f8401121561024a578251610af681610735565b93610b038c5195866106e5565b818552838086019260051b82010192831161024a578301905b828210610b2f575050505061091d6108db565b81518152908301908301610b1c565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361024a57565b7f000000000000000000000000000000000000000000000000000000000000000090610b8a8261104c565b90610b9483611241565b91610b9e84610735565b604094610bae60405192836106e5565b808252610bba81610735565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610bfe5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610c248a846107f8565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610d6e575f925f94610d16575b5050610c7f610c798d886107f8565b516113da565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610cea5781840514901517156101cc57509060019291610ccb8c8b6107f8565b5280821015610ce357505b9801959493929190610bee565b9050610cd6565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610d67575b610d2f81836106e5565b8101031261024a57610d4081610b48565b9187820151918781015192610d5c608060608401519301610b48565b94509250925f610c6a565b503d610d25565b87513d5f823e3d90fd5b90610d8282610735565b610d8f60405191826106e5565b828152601f19610d9f8294610735565b0190602036910137565b610db281610d78565b907f0000000000000000000000000000000000000000000000000000000000000000610ddd8361074d565b527f0000000000000000000000000000000000000000000000000000000000000000610e0883610787565b526002811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e3c83610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e70836107a7565b526004811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ea4836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ed8836107c7565b526006811115610f46576007907f0000000000000000000000000000000000000000000000000000000000000000610f0f846107d7565b5211610f185790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b5290565b5090565b81810292918115918404141715610f5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a764000091808303610fa15750905090565b8290671bc16d674ec800008103610fbe5750508061096891610f4a565b673782dace9d9000008103610fe25750610fdb8261096893610f4a565b0480610f4a565b9050610fed91611480565b612710808202908282041482151715610f5d5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff938483010401901515029060018201808311610f5d57811015611047575050505f90565b030190565b61105581610735565b9061106360405192836106e5565b808252601f1961107282610735565b013660208401376110828261074d565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526110c783610787565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561123c576110fe83610797565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561123c57611135836107a7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561123c5761116c836107b7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561123c576111a3836107c7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561123c576007906111dd846107d7565b837f00000000000000000000000000000000000000000000000000000000000000001690521161120b575090565b611214826107e7565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61124a81610d78565b907f00000000000000000000000000000000000000000000000000000000000000006112758361074d565b527f00000000000000000000000000000000000000000000000000000000000000006112a083610787565b526002811115610f46577f00000000000000000000000000000000000000000000000000000000000000006112d483610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611308836107a7565b526004811115610f46577f000000000000000000000000000000000000000000000000000000000000000061133c836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611370836107c7565b526006811115610f46576007907f00000000000000000000000000000000000000000000000000000000000000006113a7846107d7565b52116113b05790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116114045790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611449576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611449570590565b908015611dac578115611da6578160ff1c611d7e57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611d565781670c7d713b49da00001280611d45575b156119e257670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611519908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611476565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806119cf575b156119a757819082121580611994575b1561196c575f915f811261195d575b506064906806f05b59d3b200000081126118fa577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156118c1575b6856bc75e2d631000000811215611887575b682b5e3af16b1880000081121561184f575b6815af1d78b58c400000811215611817575b680ad78ebc5ac62000008112156117e0575b828112156117a9575b6802b5e3af16b1880000811215611772575b68015af1d78b58c4000081121561173b575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611738576117389061142f565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906116b9565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906116a7565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611695565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061168c565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061167a565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611668565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611656565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611644565b6803782dace9d9000000811261194a577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261162f565b68056bc75e2d631000008260019261162f565b600192505f03905060646115d3565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115c4565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115b4565b81670de0b6b3a7640000925f91848112611d2f575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d04575b73011798004d755d3c8bc8e03204cf44619e000000821215611ce3575b820290808302906e01855144814a7ff805980ff00840009081831215611cc0575b50506b02df0ab5a80a22c61ab5a70080821215611ca0575b50693f1fce3da636ea5cf85080821215611c80575b50690127fa27722cc06cc5e280821215611c60575b5068280e60114edb805d0380821215611c40575b50680ebc5fb4174612111080821215611c29575b506808f00f760a4b2db55d80821215611c09575b506806f5f177578893793780821215611be9575b506806248f33704b28660380821215611bca575b506805c548670b9510e7ac80821215611bab575b50611b5868056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611476565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611ba6575f035b02611588565b611ba0565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b1c565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b08565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611af4565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611ae0565b68056bc75e2d63100000809202059101905f611acc565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611ab8565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611aa4565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611a8f565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611a7a565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611a62565b906b1425982cf597cd205cef73806803782dace9d900000091059101611a41565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a24565b9050611d3b915061142f565b60019060646119f7565b50670f43fc2c04ee000082126114c6565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220659c979dfe41d02b29882b7d46ec0a2e92eadb9c4641e40f6c89f036fb5a967b64736f6c634300081b0033a26469706673582212208d8af8eb1f4e81bf0d263eaa3254924e6e0cb2db28818649a5edb0f6ed5e1eef64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/v3/tasks/20250605-v3-weighted-lp-oracle/build-info/WeightedLPOracleFactory.json b/v3/tasks/20250605-v3-weighted-lp-oracle/build-info/WeightedLPOracleFactory.json new file mode 100644 index 000000000..b934e502e --- /dev/null +++ b/v3/tasks/20250605-v3-weighted-lp-oracle/build-info/WeightedLPOracleFactory.json @@ -0,0 +1 @@ +{"id":"bca72cf89ee1344a0adf5154d59e7476","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IBasePool } from \"../vault/IBasePool.sol\";\n\n/**\n * @notice Weighted Pool data that cannot change after deployment.\n * @param tokens Pool tokens, sorted in token registration order\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @param normalizedWeights The token weights, sorted in token registration order\n */\nstruct WeightedPoolImmutableData {\n IERC20[] tokens;\n uint256[] decimalScalingFactors;\n uint256[] normalizedWeights;\n}\n\n/**\n * @notice Snapshot of current Weighted Pool data that can change.\n * @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n * in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n * there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n * @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n * @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate\n */\nstruct WeightedPoolDynamicData {\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256 staticSwapFeePercentage;\n uint256 totalSupply;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/// @notice Full Weighted pool interface.\ninterface IWeightedPool is IBasePool {\n /// @notice Indicates that one of the pool tokens' weight is below the minimum allowed.\n error MinWeight();\n\n /// @notice Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\n error NormalizedWeightInvariant();\n\n /**\n * @notice Get the normalized weights.\n * @return normalizedWeights The normalized weights, sorted in token registration order\n */\n function getNormalizedWeights() external view returns (uint256[] memory normalizedWeights);\n\n /**\n * @notice Get dynamic pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all dynamic weighted pool parameters\n */\n function getWeightedPoolDynamicData() external view returns (WeightedPoolDynamicData memory data);\n\n /**\n * @notice Get immutable pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all immutable weighted pool parameters\n */\n function getWeightedPoolImmutableData() external view returns (WeightedPoolImmutableData memory data);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of a deployed contract.\ninterface IVersion {\n /**\n * @notice Return arbitrary text representing the version of a contract.\n * @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n * version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n *\n * @return version The version string corresponding to the current deployed contract\n */\n function version() external view returns (string memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ICowConditionalOrder } from \"./ICowConditionalOrder.sol\";\n\n/// @notice Utility contract used to validate orders in the `CowSwapFeeBurner`.\ninterface IComposableCow {\n /**\n * @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n * @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n * @param proof Merkle Tree proof\n * @param params Conditional order params\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n */\n struct Payload {\n bytes32[] proof;\n ICowConditionalOrder.ConditionalOrderParams params;\n bytes offchainInput;\n }\n\n /**\n * @notice Construct a CoW order.\n * @param params Order parameters\n * @param dispatch If true, submit the order (always true in the CowSwapBurner)\n */\n function create(ICowConditionalOrder.ConditionalOrderParams calldata params, bool dispatch) external;\n\n function domainSeparator() external view returns (bytes32);\n\n /// @notice Delegated ERC-1271 signature validation with an enhanced context.\n function isValidSafeSignature(\n address safe,\n address sender,\n bytes32 _hash,\n bytes32 _domainSeparator,\n bytes32 typeHash,\n bytes calldata encodeData,\n bytes calldata payload\n ) external view returns (bytes4);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n// See https://github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L44:L56\nstruct GPv2Order {\n IERC20 sellToken;\n IERC20 buyToken;\n address receiver;\n uint256 sellAmount;\n uint256 buyAmount;\n uint32 validTo;\n bytes32 appData;\n uint256 feeAmount;\n bytes32 kind;\n bool partiallyFillable;\n bytes32 sellTokenBalance;\n bytes32 buyTokenBalance;\n}\n\n/**\n * @notice Conditional Order Interface - verify a Cow order.\n * @author CoW Protocol Developers + mfw78 \n */\ninterface ICowConditionalOrder {\n /**\n * @notice This struct is used to uniquely identify a conditional order for an owner.\n * @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n * @param handler The contract implementing the conditional order logic\n * @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n * @param staticData Data available to ALL discrete orders created by the conditional order\n */\n struct ConditionalOrderParams {\n ICowConditionalOrder handler;\n bytes32 salt;\n bytes staticData;\n }\n\n /**\n * @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n * @param reason Text explaining the reason the order is invalid\n */\n error OrderNotValid(string reason);\n\n // Errors specific to polling (interpreted by the off-chain Watchtower).\n\n /**\n * @notice Polling should be retried at the next block.\n * @param reason Text description of the reason it should be retried\n */\n error PollTryNextBlock(string reason);\n\n /**\n * @notice Polling should be retried at a specific block number.\n * @param blockNumber The block number when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtBlock(uint256 blockNumber, string reason);\n\n /**\n * @notice Polling should be retried at a specific epoch (unix timestamp).\n * @param timestamp The unix timestamp when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtEpoch(uint256 timestamp, string reason);\n\n /**\n * @notice The conditional order should not be polled again (i.e., deleted).\n * @param reason Text description of the reason it should be deleted\n */\n error PollNever(string reason);\n\n /**\n * @notice Verify that a given discrete order is valid.\n * @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n * **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n * `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n * the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n * generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n *\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` calling `isValidSignature`\n * @param _hash `EIP712` order digest\n * @param domainSeparator `EIP712` domain separator\n * @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n * @param order The proposed discrete order's `GPv2Order` data struct\n */\n function verify(\n address owner,\n address sender,\n bytes32 _hash,\n bytes32 domainSeparator,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata order\n ) external view;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\n\n/**\n * @notice Conditional Order Generator Interface\n * @author mfw78 \n */\ninterface ICowConditionalOrderGenerator is IERC165 {\n /**\n * @dev Emitted when a new conditional order is created.\n * @param owner The address that created the conditional order\n * @param params The conditional order data\n */\n event ConditionalOrderCreated(address indexed owner, ICowConditionalOrder.ConditionalOrderParams params);\n\n /**\n * @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n * @dev **MUST** revert if the order conditions are not met.\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` of the parent `isValidSignature` call\n * @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n * @return order Tradeable order for submission to the CoW Protocol API\n */\n function getTradeableOrder(\n address owner,\n address sender,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput\n ) external view returns (GPv2Order memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ICowConditionalOrderGenerator } from \"./ICowConditionalOrderGenerator.sol\";\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface ICowSwapFeeBurner is IERC1271, IProtocolFeeBurner, ICowConditionalOrder, ICowConditionalOrderGenerator {\n enum OrderStatus {\n Nonexistent,\n Active,\n Filled,\n Failed\n }\n\n /**\n * @notice An order was retried after failing.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param minAmountOut The minimum number of target tokens required\n * @param deadline The deadline for the new order to be filled\n */\n event OrderRetried(IERC20 tokenIn, uint256 exactAmountIn, uint256 minAmountOut, uint256 deadline);\n\n /**\n * @notice An order was canceled after failure.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param receiver The account that received the tokens from the unfilled order\n */\n event OrderCanceled(IERC20 tokenIn, uint256 exactAmountIn, address receiver);\n\n /**\n * @notice The order parameters were invalid.\n * @param reason Text explaining the reason the order is invalid\n */\n error InvalidOrderParameters(string reason);\n\n /**\n * @notice Attempt to revert an order that had not failed.\n * @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n * @param actualStatus The status of the order when `revertOrder` was called\n */\n error OrderHasUnexpectedStatus(OrderStatus actualStatus);\n\n /// @notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n error InterfaceIsSignatureVerifierMuxer();\n\n /**\n * @notice Get the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderData The order data for the given token\n */\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory orderData);\n\n /**\n * @notice Get the status of the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderStatus The status of the order for the given token\n */\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus orderStatus);\n\n /**\n * @notice Retry an order that has not been filled yet and expired.\n * @param tokenIn The token used to identify the order\n * @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n * @param deadline The deadline for the order to be filled.\n */\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external;\n\n /**\n * @notice Return tokens from an order that has failed.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the tokens from the unfilled order\n */\n function cancelOrder(IERC20 tokenIn, address receiver) external;\n\n /**\n * @notice Emergency return tokens from an order regardless of status.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the from the unfilled order\n */\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Common interface for helper functions that operate on a subset of pools.\ninterface IPoolHelperCommon {\n /**\n * @notice Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\n * @param pool Address of the pool that was added\n */\n event PoolAddedToSet(address pool);\n\n /**\n * @notice Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\n * @param pool Address of the pool that was removed\n */\n event PoolRemovedFromSet(address pool);\n\n /**\n * @notice Cannot add a pool that is already there.\n * @param pool Address of the pool being added\n */\n error PoolAlreadyInSet(address pool);\n\n /**\n * @notice Cannot remove a pool that was not added.\n * @param pool Address of the pool being removed\n */\n error PoolNotInSet(address pool);\n\n /// @notice An index is beyond the current bounds of the set.\n error IndexOutOfBounds();\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Add pools to the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add\n * pools to the set.\n *\n * @param newPools List of pools to add\n */\n function addPools(address[] calldata newPools) external;\n\n /**\n * @notice Remove pools from the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove\n * pools from the set.\n *\n * @param pools List of pools to remove\n */\n function removePools(address[] memory pools) external;\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /**\n * @notice Get the number of pools.\n * @dev Needed to support pagination in case the set is too large to process in a single transaction.\n * @return poolCount The current number of pools in the set\n */\n function getPoolCount() external view returns (uint256);\n\n /**\n * @notice Check whether a pool is in the set of pools.\n * @param pool Pool to check\n * @return isPausable True if the pool is in the set, false otherwise\n */\n function hasPool(address pool) external view returns (bool);\n\n /**\n * @notice Get a range of pools.\n * @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n * @param from Start index\n * @param to End index\n * @return pools List of pools\n */\n function getPools(uint256 from, uint256 to) external view returns (address[] memory pools);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n * allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n * addressed here, and must still be done through the Vault.\n */\ninterface IPoolPauseHelper {\n /**\n * @notice Pause a set of pools.\n * @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n * on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n * the same account that can add or remove pools from the pausable list.\n *\n * Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n * is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n * the individual pools' pause managers.\n *\n * @param pools List of pools to pause\n */\n function pausePools(address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n * contract, which allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n * allow governance to set fees can be added (i.e., they must not have swap managers).\n */\ninterface IPoolSwapFeeHelper {\n /**\n * @notice Cannot add a pool that has a swap manager.\n * @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n * only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n * to grant this permission.\n *\n * @param pool Address of the pool being added\n */\n error PoolHasSwapManager(address pool);\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the static swap fee percentage on a given pool.\n * @dev This is a permissioned function. Governance must grant this contract permission to call\n * `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n * cannot be changed by governance if it is set, and the pool cannot be added to the set.\n *\n * @param pool The address of the pool\n * @param swapFeePercentage The new swap fee percentage\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IProtocolFeeBurner {\n /**\n * @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n * @param pool The pool on which the fee was collected (used for event tracking)\n * @param feeToken The token in which the fee was originally collected\n * @param exactFeeTokenAmountIn The number of feeTokens collected\n * @param targetToken The preferred token for fee collection (e.g., USDC)\n * @param actualTargetTokenAmountOut The number of target tokens actually received\n * @param recipient The address where the target tokens were sent\n */\n event ProtocolFeeBurned(\n address indexed pool,\n IERC20 indexed feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 indexed targetToken,\n uint256 actualTargetTokenAmountOut,\n address recipient\n );\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /// @notice The swap transaction was not validated before the specified deadline timestamp.\n error SwapDeadline();\n\n /**\n * @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (token out of the swap)\n * @param minTargetTokenAmountOut The minimum amount out for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n * @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n * setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n *\n * Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n * controller.\n */\ninterface IProtocolFeeHelper {\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the protocol swap fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the protocol yield fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"../vault/IProtocolFeeController.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IProtocolFeeSweeper {\n /**\n * @notice Emitted when the target token is set or updated.\n * @param token The preferred token for receiving protocol fees\n */\n event TargetTokenSet(IERC20 indexed token);\n\n /**\n * @notice Emitted when the fee recipient address is set or updated.\n * @param feeRecipient The final destination of collected protocol fees\n */\n event FeeRecipientSet(address indexed feeRecipient);\n\n /**\n * @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n * @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n * @param pool The pool on which the fee was collected\n * @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n * @param feeTokenAmount The number of feeTokens\n * @param recipient The recipient of the fee tokens\n */\n event ProtocolFeeSwept(address indexed pool, IERC20 indexed feeToken, uint256 feeTokenAmount, address recipient);\n\n /**\n * @notice Emitted when a burner is added to the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was added\n */\n event ProtocolFeeBurnerAdded(address indexed protocolFeeBurner);\n\n /**\n * @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was removed\n */\n event ProtocolFeeBurnerRemoved(address indexed protocolFeeBurner);\n\n /// @notice The fee recipient is invalid.\n error InvalidFeeRecipient();\n\n /// @notice The target token is invalid.\n error InvalidTargetToken();\n\n /// @notice The protocol fee burner to be added is invalid.\n error InvalidProtocolFeeBurner();\n\n /**\n * @notice The specified fee burner has not been approved.\n * @param protocolFeeBurner The address of the unsupported fee burner\n */\n error UnsupportedProtocolFeeBurner(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners can only be added to the allowlist once.\n * @param protocolFeeBurner The address of an approved protocol fee burner\n */\n error ProtocolFeeBurnerAlreadyAdded(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners must be added to the allowlist before being removed.\n * @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist\n */\n error ProtocolFeeBurnerNotAdded(address protocolFeeBurner);\n\n /**\n * @notice The burner did not consume its entire allowance.\n * @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n * approval that could be exploited later.\n */\n error BurnerDidNotConsumeAllowance();\n\n /// @notice Unwrapping is not allowed for the operation.\n error UnwrapIsNotAllowed();\n\n /**\n * @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n * @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n * the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n * `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n *\n * This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n * disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n * periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n * these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n * then call the sweeper to put in the order with the burner.\n *\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice Return the address of the current `ProtocolFeeController` from the Vault.\n * @dev It is not immutable in the Vault, so we need to fetch it every time.\n * @return protocolFeeController The address of the current `ProtocolFeeController`\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController);\n\n /**\n * @notice Getter for the target token.\n * @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n * @return targetToken The current target token\n */\n function getTargetToken() external view returns (IERC20);\n\n /**\n * @notice Getter for the current fee recipient.\n * @dev Can be changed by `setFeeRecipient`.\n * @return feeRecipient The current fee recipient\n */\n function getFeeRecipient() external view returns (address);\n\n /**\n * @notice Check whether a given address corresponds to an approved protocol fee burner.\n * @param protocolFeeBurner The address to be checked\n * @return isApproved True if the given address is on the approved protocol fee burner allowlist\n */\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool);\n\n /**\n * @notice Update the fee recipient address.\n * @dev This is a permissioned function.\n * @param feeRecipient The address of the new fee recipient\n */\n function setFeeRecipient(address feeRecipient) external;\n\n /**\n * @notice Update the address of the target token.\n * @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n * @param targetToken The address of the target token\n */\n function setTargetToken(IERC20 targetToken) external;\n\n /**\n * @notice Add an approved fee burner to the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of an approved protocol fee burner to be added\n */\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Remove a fee burner from the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed\n */\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n * @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n * @param feeTokens The tokens to recover\n */\n function recoverProtocolFees(IERC20[] memory feeTokens) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { AggregatorV3Interface } from \"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\";\n\ninterface IWeightedLPOracle {\n /**\n * @notice Calculates the tvl based on the provided prices.\n * @dev Prices are defined the same way as in the oracle feed, and scaled to 18-decimal FP values.\n * @param prices An array of prices for the tokens in the pool\n * @return tvl TVL calculated from the prices and current weights\n */\n function calculateTVL(int256[] memory prices) external view returns (uint256 tvl);\n\n /**\n * @notice Gets the latest feed data.\n * @return prices An array of latest prices from the feeds\n * @return updatedAt The timestamp of the last update\n */\n function getFeedData() external view returns (int256[] memory prices, uint256 updatedAt);\n\n /**\n * @notice Gets the list of feeds used by the oracle.\n * @return An array of AggregatorV3Interface instances representing the feeds.\n */\n function getFeeds() external view returns (AggregatorV3Interface[] memory);\n\n /**\n * @notice Gets the decimal scaling factors for each feed token.\n * @return An array of scaling factors corresponding to each feed.\n */\n function getFeedTokenDecimalScalingFactors() external view returns (uint256[] memory);\n\n /**\n * @notice Gets the current weights of the tokens in the pool.\n * @return An array of weights corresponding to each token in the pool.\n */\n function getWeights() external view returns (uint256[] memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { AggregatorV3Interface } from \"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\";\n\nimport { IWeightedPool } from \"../pool-weighted/IWeightedPool.sol\";\nimport { IWeightedLPOracle } from \"./IWeightedLPOracle.sol\";\n\ninterface IWeightedLPOracleFactory {\n event WeightedLPOracleCreated(IWeightedPool indexed pool, IWeightedLPOracle oracle, uint256 oracleVersion);\n\n function create(\n IWeightedPool pool,\n AggregatorV3Interface[] memory feeds\n ) external returns (IWeightedLPOracle oracle);\n\n function getOracle(IWeightedPool pool) external view returns (IWeightedLPOracle oracle);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IUnbalancedLiquidityInvariantRatioBounds } from \"./IUnbalancedLiquidityInvariantRatioBounds.sol\";\nimport { ISwapFeePercentageBounds } from \"./ISwapFeePercentageBounds.sol\";\nimport { PoolSwapParams, Rounding, SwapKind } from \"./VaultTypes.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool.\n * @dev All pool types should implement this interface. Note that it also requires implementation of:\n * - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n * - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n * liquidity operation.\n */\ninterface IBasePool is ISwapFeePercentageBounds, IUnbalancedLiquidityInvariantRatioBounds {\n /***************************************************************************\n Invariant\n ***************************************************************************/\n\n /**\n * @notice Computes the pool's invariant.\n * @dev This function computes the invariant based on current balances (and potentially other pool state).\n * The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n * If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n * returned for both rounding directions.\n *\n * You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n * (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n *\n * 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n * effectively add liquidity after the swap - but it should never decrease.\n *\n * 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n * the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n *\n * Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n * Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n * the total value should not change.\n *\n * Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n * the same total value would get a different number of LP shares. In that case, LP shares would not be\n * interchangeable, as they must be in a fair DEX.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param rounding Rounding direction to consider when computing the invariant\n * @return invariant The calculated invariant of the pool, represented as a uint256\n */\n function computeInvariant(\n uint256[] memory balancesLiveScaled18,\n Rounding rounding\n ) external view returns (uint256 invariant);\n\n /**\n * @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n * @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n * The pool must round up for the Vault to round in the protocol's favor when calling this function.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @return newBalance The new balance of the selected token, after the operation\n */\n function computeBalance(\n uint256[] memory balancesLiveScaled18,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view returns (uint256 newBalance);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Execute a swap in the pool.\n * @param params Swap parameters (see above for struct definition)\n * @return amountCalculatedScaled18 Calculated amount for the swap operation\n */\n function onSwap(PoolSwapParams calldata params) external returns (uint256 amountCalculatedScaled18);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool Factory.\n * @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n * (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\n */\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @notice A pool was deployed.\n * @param pool The address of the new pool\n */\n event PoolCreated(address indexed pool);\n\n /// @notice The factory was disabled by governance.\n event FactoryDisabled();\n\n /// @notice Attempted pool creation after the factory was disabled.\n error Disabled();\n\n /// @notice A pool index is beyond the current bounds of the array.\n error IndexOutOfBounds();\n\n /**\n * @notice Check whether a pool was deployed by this factory.\n * @param pool The pool to check\n * @return success True if `pool` was created by this factory\n */\n function isPoolFromFactory(address pool) external view returns (bool success);\n\n /**\n * @notice Return the total number of pools deployed by this factory.\n * @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n * @return poolCount The number of pools deployed by this factory\n */\n function getPoolCount() external view returns (uint256 poolCount);\n\n /**\n * @notice Return a subset of the list of pools deployed by this factory.\n * @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n * stop at the end and return fewer results than requested.\n *\n * @param start The index of the first pool to return\n * @param count The maximum number of pools to return\n * @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\n */\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools);\n\n /**\n * @notice Return the complete list of pools deployed by this factory.\n * @return pools The list of pools deployed by this factory\n */\n function getPools() external view returns (address[] memory pools);\n\n /**\n * @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n * @param constructorArgs The arguments used to create the pool\n * @param salt The salt used to deploy the pool\n * @return deploymentAddress The predicted address of the pool, given the salt\n */\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) external view returns (address deploymentAddress);\n\n /**\n * @notice Check whether this factory has been disabled by governance.\n * @return success True if this factory was disabled\n */\n function isDisabled() external view returns (bool success);\n\n /**\n * @notice Disable the factory, preventing the creation of more pools.\n * @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBalancerContractRegistry } from \"../standalone-utils/IBalancerContractRegistry.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\n\ninterface IProtocolFeePercentagesProvider {\n /**\n * @notice Protocol fee percentages have been set for the given factory.\n * @param factory The pool factory\n * @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n * @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory\n */\n event FactorySpecificProtocolFeePercentagesSet(\n address indexed factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n );\n\n /// @notice The protocol fee controller was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /**\n * @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n * @param factory The address of the unknown factory\n */\n error UnknownFactory(address factory);\n\n /**\n * @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n * @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n * `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n * You need to set the factory fees before you can apply them to pools from that factory.\n *\n * @param factory The factory address where fees have not been set\n */\n error FactoryFeesNotSet(address factory);\n\n /**\n * @notice The given pool is not from the expected factory.\n * @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n * @param pool The address of the unrecognized pool\n * @param factory The address of the factory\n */\n error PoolNotFromFactory(address pool, address factory);\n\n /**\n * @notice Get the address of the `ProtocolFeeController` used to set fees.\n * @return protocolFeeController The address of the fee controller\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /**\n * @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n * @return balancerContractRegistry The address of the Balancer contract registry\n */\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry balancerContractRegistry);\n\n /**\n * @notice Query the protocol fee percentages for a given factory.\n * @param factory The address of the factory\n * @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n * @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory\n */\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Assign intended protocol fee percentages for a given factory.\n * @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n * this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n * to update the fee percentages on a set of pools from that factory.\n *\n * @param factory The address of the factory\n * @param protocolSwapFeePercentage The new protocol swap fee percentage\n * @param protocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external;\n\n /**\n * @notice Update the protocol fees for a set of pools from a given factory.\n * @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n * Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n *\n * @param factory The address of the factory\n * @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\n */\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IRouter {\n /***************************************************************************\n Pool Initialization\n ***************************************************************************/\n\n /**\n * @notice Data for the pool initialization hook.\n * @param sender Account originating the pool initialization operation\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n */\n struct InitializeHookParams {\n address sender;\n address pool;\n IERC20[] tokens;\n uint256[] exactAmountsIn;\n uint256 minBptAmountOut;\n bool wethIsEth;\n bytes userData;\n }\n\n /**\n * @notice Initialize a liquidity pool.\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n * @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity\n */\n function initialize(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n */\n function addLiquidityProportional(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn);\n\n /**\n * @notice Adds liquidity to a pool with arbitrary token amounts.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return bptAmountOut Actual amount of pool tokens received\n */\n function addLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /**\n * @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param maxAmountIn Maximum amount of tokens to be added\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountIn Actual amount of tokens added\n */\n function addLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 maxAmountIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountIn);\n\n /**\n * @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n * @dev To support donation, the pool config `enableDonation` flag must be set to true.\n * @param pool Address of the liquidity pool\n * @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to donate liquidity\n */\n function donate(address pool, uint256[] memory amountsIn, bool wethIsEth, bytes memory userData) external payable;\n\n /**\n * @notice Adds liquidity to a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n * @return bptAmountOut Actual amount of pool tokens received\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param minAmountOut Minimum amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountOut Actual amount of tokens received\n */\n function removeLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n uint256 minAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Exact amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n */\n function removeLiquiditySingleTokenExactOut(\n address pool,\n uint256 maxBptAmountIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn);\n\n /**\n * @notice Removes liquidity from a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external payable returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Data for the swap hook.\n * @param sender Account initiating the swap operation\n * @param kind Type of swap (exact in or exact out)\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountGiven Amount given based on kind of the swap (e.g., tokenIn for exact in)\n * @param limit Maximum or minimum amount based on the kind of swap (e.g., maxAmountIn for exact out)\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n */\n struct SwapSingleTokenHookParams {\n address sender;\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGiven;\n uint256 limit;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n }\n\n /**\n * @notice Executes a swap operation specifying an exact input token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param minAmountOut Minimum amount of tokens to be received\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function swapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n uint256 minAmountOut,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Executes a swap operation specifying an exact output token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param maxAmountIn Maximum amount of tokens to be sent\n * @param deadline Deadline for the swap, after which it will revert\n * @param userData Additional (optional) data sent with the swap request\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function swapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n uint256 maxAmountIn,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountIn);\n\n /***************************************************************************\n Queries\n ***************************************************************************/\n\n /**\n * @notice Queries an `addLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n */\n function queryAddLiquidityProportional(\n address pool,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn);\n\n /**\n * @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountOut Expected amount of pool tokens to receive\n */\n function queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /**\n * @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param exactBptAmountOut Expected exact amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Expected amount of tokens to add\n */\n function queryAddLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountIn);\n\n /**\n * @notice Queries an `addLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Expected minimum amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n * @return bptAmountOut Expected amount of pool tokens to receive\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryAddLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param tokenOut Token used to remove liquidity\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Expected amount of tokens to receive\n */\n function queryRemoveLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Expected exact amount of tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n */\n function queryRemoveLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn);\n\n /**\n * @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryRemoveLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum swap fee percentages for a pool.\n * @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n * that new pool developers think about and set these bounds according to their specific pool type.\n *\n * A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n * function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n * a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n * LVR/MEV strategies, where a very high fee makes sense.\n *\n * Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n * more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n * the highest value below 100% that satisfies the precision requirements.\n */\ninterface ISwapFeePercentageBounds {\n /// @return minimumSwapFeePercentage The minimum swap fee percentage for a pool\n function getMinimumSwapFeePercentage() external view returns (uint256 minimumSwapFeePercentage);\n\n /// @return maximumSwapFeePercentage The maximum swap fee percentage for a pool\n function getMaximumSwapFeePercentage() external view returns (uint256 maximumSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n * @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n * and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n * `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n * to their pool type's math.\n *\n * For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n * logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n * used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\n */\ninterface IUnbalancedLiquidityInvariantRatioBounds {\n /// @return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity\n function getMinimumInvariantRatio() external view returns (uint256 minimumInvariantRatio);\n\n /// @return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity\n function getMaximumInvariantRatio() external view returns (uint256 maximumInvariantRatio);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// solhint-disable no-inline-assembly\n\n/// @notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\nlibrary RevertCodec {\n /**\n * @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n * @param result The result of the query operation\n */\n error Result(bytes result);\n\n /// @notice Handle the \"reverted without a reason\" case (i.e., no return data).\n error ErrorSelectorNotFound();\n\n function catchEncodedResult(bytes memory resultRaw) internal pure returns (bytes memory) {\n bytes4 errorSelector = RevertCodec.parseSelector(resultRaw);\n if (errorSelector != Result.selector) {\n // Bubble up error message if the revert reason is not the expected one.\n RevertCodec.bubbleUpRevert(resultRaw);\n }\n\n uint256 resultRawLength = resultRaw.length;\n assembly (\"memory-safe\") {\n resultRaw := add(resultRaw, 0x04) // Slice the sighash\n mstore(resultRaw, sub(resultRawLength, 4)) // Set proper length\n }\n\n return abi.decode(resultRaw, (bytes));\n }\n\n /// @dev Returns the first 4 bytes in an array, reverting if the length is < 4.\n function parseSelector(bytes memory callResult) internal pure returns (bytes4 errorSelector) {\n if (callResult.length < 4) {\n revert ErrorSelectorNotFound();\n }\n assembly (\"memory-safe\") {\n errorSelector := mload(add(callResult, 0x20)) // Load the first 4 bytes from data (skip length offset)\n }\n }\n\n /// @dev Taken from Openzeppelin's Address.\n function bubbleUpRevert(bytes memory returnData) internal pure {\n // Look for revert reason and bubble it up if present.\n if (returnData.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly.\n\n assembly (\"memory-safe\") {\n let return_data_size := mload(returnData)\n revert(add(32, returnData), return_data_size)\n }\n } else {\n revert ErrorSelectorNotFound();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\";\n\n/**\n * @notice Retrieves a contract's version from storage.\n * @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n * are not yet supported.\n *\n * Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n * detailed information about the deployment. For instance:\n *\n * `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\n */\ncontract Version is IVersion {\n string private _version;\n\n constructor(string memory version_) {\n _setVersion(version_);\n }\n\n /**\n * @notice Getter for the version.\n * @return version The stored contract version\n */\n function version() external view returns (string memory) {\n return _version;\n }\n\n /// @dev Internal setter that allows this contract to be used in proxies.\n function _setVersion(string memory newVersion) internal {\n _version = newVersion;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract ERC20TestToken is ERC20 {\n uint8 private immutable _decimals;\n\n /// @dev Simulate tokens that don't allow zero transfers.\n error ZeroTransfer();\n\n constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) {\n _decimals = decimals_;\n }\n\n function decimals() public view override returns (uint8) {\n return _decimals;\n }\n\n function mint(address recipient, uint256 amount) external {\n _mint(recipient, amount);\n }\n\n function burn(address sender, uint256 amount) external {\n _burn(sender, amount);\n }\n\n function transfer(address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transfer(to, value);\n }\n\n function transferFrom(address from, address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transferFrom(from, to, value);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n /// @dev Vault cannot be address(0).\n error VaultNotSet();\n\n IVault private immutable _vault;\n\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n if (address(vault) == address(0)) {\n revert VaultNotSet();\n }\n\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0).\n function _ensureAuthenticatedByExclusiveRole(address where, address roleAccount) internal view {\n if (roleAccount == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAccount) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive).\n function _ensureAuthenticatedByRole(address where, address roleAccount) internal view {\n // If the sender is not the delegated manager for the role, defer to governance.\n if (msg.sender != roleAccount) {\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n }\n // (else) if the sender is the delegated manager, proceed.\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(\n IVault vault_,\n uint256 initialGlobalSwapFeePercentage,\n uint256 initialGlobalYieldFeePercentage\n ) SingletonAuthentication(vault_) VaultGuard(vault_) {\n _setGlobalProtocolSwapFeePercentage(initialGlobalSwapFeePercentage);\n _setGlobalProtocolYieldFeePercentage(initialGlobalYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external authenticate {\n _setGlobalProtocolSwapFeePercentage(newProtocolSwapFeePercentage);\n }\n\n function _setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) internal withValidSwapFee(newProtocolSwapFeePercentage) {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external authenticate {\n _setGlobalProtocolYieldFeePercentage(newProtocolYieldFeePercentage);\n }\n\n function _setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) internal withValidYieldFee(newProtocolYieldFeePercentage) {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"./CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// solhint-disable-next-line interface-starts-with-i\ninterface AggregatorV3Interface {\n function decimals() external view returns (uint8);\n\n function description() external view returns (string memory);\n\n function version() external view returns (uint256);\n\n function getRoundData(\n uint80 _roundId\n ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\n\n function latestRoundData()\n external\n view\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with _data\n */\n function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * All two of these values are immutable: they can only be set once during\n * construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n * true using the following override:\n * ```\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance != type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/structs/EnumerableSet.sol)\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n *\n * [WARNING]\n * ====\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n * unusable.\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n *\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n * array of EnumerableSet.\n * ====\n */\nlibrary EnumerableSet {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes32 value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes32 lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set) private view returns (bytes32[] memory) {\n return set._values;\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner);\n bytes32[] memory result;\n\n /// @solidity memory-safe-assembly\n assembly {\n result := store\n }\n\n return result;\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner);\n address[] memory result;\n\n /// @solidity memory-safe-assembly\n assembly {\n result := store\n }\n\n return result;\n }\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner);\n uint256[] memory result;\n\n /// @solidity memory-safe-assembly\n assembly {\n result := store\n }\n\n return result;\n }\n}\n"},"contracts/BalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/**\n * @notice On-chain registry of standard Balancer contracts.\n * @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n * purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n * is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n * msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n * spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n *\n * It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n * \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n * unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n * since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n * permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n * keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n * true for fully-compliant tokens with properly initialized buffers.\n *\n * Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n * support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n * and query this contract to determine whether the Router is a \"trusted\" one.\n *\n * The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n * Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n * `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n * address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n *\n * Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n * contract for the Vault address, so it doesn't need to be a type.\n */\ncontract BalancerContractRegistry is IBalancerContractRegistry, SingletonAuthentication {\n // ContractId is the hash of contract name. Names must be unique (cannot have the same name with different types).\n mapping(bytes32 contractId => address addr) private _contractRegistry;\n\n // Given an address, store the contract state (i.e., type, and active or deprecated).\n //\n // Conceptually, we maintain a => => registry of contracts.\n // The only thing that can change is the `isActive` flag, when a contract is deprecated. If a contract is\n // registered in error (e.g., wrong type or address), the remedy is to deregister (delete) it, and then register\n // the correct one.\n //\n // We also maintain a registry of aliases: => , where the target address\n // must be in the main registry, and the alias cannot match a unique registered contract name. Aliases can be\n // overwritten (e.g., when the `WeightedPool` alias migrates from v2 to v3). See `_contractAliases` below.\n mapping(address addr => ContractInfo info) private _contractInfo;\n\n // ContractAliasId is the hash of the alias (e.g., \"WeightedPool\").\n // This is separate from the main contract registry to enforce different rules (e.g., prevent corrupting the\n // contract state by overwriting a registry entry with an \"alias\" that matches a different contract).\n mapping(bytes32 contractAliasId => address addr) private _contractAliases;\n\n /**\n * @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n * @dev This should never happen.\n * @param contractName The name of the contract that has a registry entry but no contract info\n * @param contractAddress The address of the contract with missing state\n */\n error InconsistentState(string contractName, address contractAddress);\n\n constructor(IVault vault) SingletonAuthentication(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /*\n * Example usage:\n *\n * // Register both the named version and the \"latest\" Weighted Pool Factory.\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20241205-v3-weighted-pool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n *\n * // Register the Routers (two of them anyway).\n * registerBalancerContract(ContractType.ROUTER, '20241205-v3-router', 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd);\n * registerBalancerContract(\n * ContractType.ROUTER, '20241205-v3-batch-router', 0x136f1EFcC3f8f88516B9E94110D56FDBfB1778d1\n * );\n *\n * // Now, hooks that require trusted routers can be deployed with the registry address, and query the router to\n * // see whether it's \"trusted\" (i.e., registered by governance):\n *\n * isActiveBalancerContract(ContractType.ROUTER, 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd) would return true.\n *\n * Off-chain processes that wanted to know the current address of the Weighted Pool Factory could query by either\n * name:\n *\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool');\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool');\n *\n * These would return the same result.\n *\n * If we replaced `20241205-v3-weighted-pool` with `20250107-v3-weighted-pool-v2`, governance would call:\n *\n * deprecateBalancerContract(0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20250107-v3-weighted-pool-v2', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8)\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8);\n *\n * At that point,\n * getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool') returns active=false,\n * isActiveBalancerContract(ContractType.POOL_FACTORY, 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc) returns false,\n * getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool') returns the v2 address (and active=true).\n */\n\n /// @inheritdoc IBalancerContractRegistry\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure address isn't already in use.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered) {\n revert ContractAddressAlreadyRegistered(info.contractType, contractAddress);\n }\n\n // Ensure name isn't already in use as a registered contract name.\n bytes32 contractId = _getContractId(contractName);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractNameAlreadyRegistered(info.contractType, contractName);\n }\n\n // Also check that it isn't an existing alias.\n address existingAliasAddress = _contractAliases[contractId];\n if (existingAliasAddress != address(0)) {\n revert ContractNameInUseAsAlias(contractName, existingAliasAddress);\n }\n\n // Store the address in the registry, under the unique name.\n _contractRegistry[contractId] = contractAddress;\n\n // Record the address as active. The `isActive` flag enables differentiating between unregistered and deprecated\n // addresses.\n _contractInfo[contractAddress] = ContractInfo({\n contractType: contractType,\n isRegistered: true,\n isActive: true\n });\n\n emit BalancerContractRegistered(contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deregisterBalancerContract(string memory contractName) external authenticate {\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure the name is registered\n bytes32 contractId = _getContractId(contractName);\n address contractAddress = _contractRegistry[contractId];\n\n if (contractAddress == address(0)) {\n revert ContractNameNotRegistered(contractName);\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n // This should be impossible: the registry and info mappings must be in sync.\n if (info.isRegistered == false) {\n revert InconsistentState(contractName, contractAddress);\n }\n\n delete _contractRegistry[contractId];\n delete _contractInfo[contractAddress];\n\n emit BalancerContractDeregistered(info.contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deprecateBalancerContract(address contractAddress) external authenticate {\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Check that the address has been registered.\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // If it was registered, check that it has not already been deprecated.\n if (info.isActive == false) {\n revert ContractAlreadyDeprecated(contractAddress);\n }\n\n // Set active to false to indicate that it's now deprecated. This is currently a one-way operation, since\n // deprecation is considered permanent. For instance, calling `disable` to deprecate a factory (preventing\n // new pool creation) is permanent.\n info.isActive = false;\n _contractInfo[contractAddress] = info;\n\n emit BalancerContractDeprecated(contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function addOrUpdateBalancerContractAlias(\n string memory contractAlias,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (bytes(contractAlias).length == 0) {\n revert InvalidContractAlias();\n }\n\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n // Ensure the address was already registered.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // Ensure the proposed alias is not in use (i.e., no collision with existing registered contracts).\n // It can match an existing alias: that's the \"update\" case. For instance, if we wanted to migrate\n // the `WeightedPool` alias from v2 to v3. If the name is not already in `_contractAliases`, we are\n // adding a new alias.\n bytes32 contractId = _getContractId(contractAlias);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractAliasInUseAsName(info.contractType, contractAlias);\n }\n\n // This will either add a new or overwrite an existing alias.\n _contractAliases[contractId] = contractAddress;\n\n emit ContractAliasUpdated(contractAlias, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isActiveBalancerContract(ContractType contractType, address contractAddress) external view returns (bool) {\n return _isActiveBalancerContract(contractType, contractAddress);\n }\n\n function _isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) internal view returns (bool) {\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Ensure the address was registered as the given type - and that it's still active.\n return info.isActive && info.contractType == contractType;\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive) {\n bytes32 contractId = _getContractId(contractName);\n address registeredAddress = _contractRegistry[contractId];\n\n // Also check the aliases, if not found in the primary registry.\n if (registeredAddress == address(0)) {\n registeredAddress = _contractAliases[contractId];\n }\n\n ContractInfo memory info = _contractInfo[registeredAddress];\n // It is possible to register a contract and alias, then deregister the contract, leaving a \"stale\" alias\n // reference. In this case, `isRegistered` will be false. Only return the contract address if it is still\n // valid and of the correct type.\n if (info.isRegistered && info.contractType == contractType) {\n contractAddress = registeredAddress;\n isActive = info.isActive;\n }\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info) {\n return _contractInfo[contractAddress];\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isTrustedRouter(address router) external view returns (bool) {\n return _isActiveBalancerContract(ContractType.ROUTER, router);\n }\n\n function _getContractId(string memory contractName) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(contractName));\n }\n}\n"},"contracts/CallAndRevert.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\n\ncontract CallAndRevert {\n error QuoteResultSpoofed();\n\n function _callAndRevert(address target, bytes memory data) internal returns (bytes memory) {\n try CallAndRevert(address(this)).callAndRevertHook(target, data) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return RevertCodec.catchEncodedResult(result);\n }\n }\n\n function callAndRevertHook(address target, bytes memory data) external {\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory result) = (target).call(data);\n if (success) {\n // This will only revert if result is empty and sender account has no code.\n Address.verifyCallResultFromTarget(msg.sender, success, result);\n // Send result in revert reason.\n revert RevertCodec.Result(result);\n } else {\n // If the call reverted with a spoofed `QuoteResult`, we catch it and bubble up a different reason.\n bytes4 errorSelector = RevertCodec.parseSelector(result);\n if (errorSelector == RevertCodec.Result.selector) {\n revert QuoteResultSpoofed();\n }\n\n // Otherwise we bubble up the original revert reason.\n RevertCodec.bubbleUpRevert(result);\n }\n }\n}\n"},"contracts/CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { ICowSwapFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\";\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport {\n ICowConditionalOrderGenerator\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\";\nimport {\n ICowConditionalOrder,\n GPv2Order\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title CowSwapFeeBurner\n * @notice A contract that burns protocol fees using CowSwap.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract CowSwapFeeBurner is ICowSwapFeeBurner, SingletonAuthentication, ReentrancyGuardTransient, Version {\n using SafeERC20 for IERC20;\n\n struct ShortOrder {\n IERC20 tokenOut;\n address receiver;\n uint256 minAmountOut;\n uint32 deadline;\n }\n\n bytes4 internal constant _SIGNATURE_VERIFIER_MUXER_INTERFACE = 0x62af8dc2;\n bytes32 internal immutable _sellKind = keccak256(\"sell\");\n bytes32 internal immutable _tokenBalance = keccak256(\"erc20\");\n\n IComposableCow public immutable composableCow;\n address public immutable vaultRelayer;\n bytes32 public immutable appData;\n\n // Orders are identified by the tokenIn (often called the tokenIn).\n mapping(IERC20 token => ShortOrder order) internal _orders;\n\n constructor(\n IVault _vault,\n IComposableCow _composableCow,\n address _vaultRelayer,\n bytes32 _appData,\n string memory _version\n ) SingletonAuthentication(_vault) Version(_version) {\n composableCow = _composableCow;\n vaultRelayer = _vaultRelayer;\n appData = _appData;\n }\n\n /***************************************************************************\n ICowSwapFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory) {\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus status) {\n (status, ) = _getOrderStatusAndBalance(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external authenticate {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _checkMinAmountOut(minAmountOut);\n _checkDeadline(deadline);\n\n _orders[tokenIn].minAmountOut = minAmountOut;\n _orders[tokenIn].deadline = uint32(deadline);\n\n _createCowOrder(tokenIn);\n\n emit OrderRetried(tokenIn, amount, minAmountOut, deadline);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function cancelOrder(IERC20 tokenIn, address receiver) external authenticate {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _cancelOrder(tokenIn, receiver, amount);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external authenticate {\n _cancelOrder(tokenIn, receiver, tokenIn.balanceOf(address(this)));\n }\n\n function _cancelOrder(IERC20 tokenIn, address receiver, uint256 amount) internal {\n tokenIn.forceApprove(vaultRelayer, 0);\n delete _orders[tokenIn];\n\n SafeERC20.safeTransfer(tokenIn, receiver, amount);\n\n emit OrderCanceled(tokenIn, amount, receiver);\n }\n\n /***************************************************************************\n IProtocolFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external virtual authenticate nonReentrant {\n _burn(\n pool,\n feeToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n true // pullFeeToken\n );\n }\n\n function _burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline,\n bool pullFeeToken\n ) internal {\n if (targetToken == feeToken) {\n revert InvalidOrderParameters(\"Fee token and target token are the same\");\n } else if (feeTokenAmount == 0) {\n revert InvalidOrderParameters(\"Fee token amount is zero\");\n }\n\n _checkMinAmountOut(minTargetTokenAmountOut);\n _checkDeadline(deadline);\n\n (OrderStatus status, ) = _getOrderStatusAndBalance(feeToken);\n if (status != OrderStatus.Nonexistent && status != OrderStatus.Filled) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n if (pullFeeToken) {\n feeToken.safeTransferFrom(msg.sender, address(this), feeTokenAmount);\n }\n\n _createCowOrder(feeToken);\n\n feeToken.forceApprove(vaultRelayer, feeTokenAmount);\n\n _orders[feeToken] = ShortOrder({\n tokenOut: targetToken,\n receiver: recipient,\n minAmountOut: minTargetTokenAmountOut,\n deadline: uint32(deadline)\n });\n\n emit ProtocolFeeBurned(pool, feeToken, feeTokenAmount, targetToken, minTargetTokenAmountOut, recipient);\n }\n\n /***************************************************************************\n ICowConditionalOrder\n ***************************************************************************/\n\n /// @inheritdoc ICowConditionalOrderGenerator\n function getTradeableOrder(\n address,\n address,\n bytes32,\n bytes calldata staticInput,\n bytes calldata\n ) public view returns (GPv2Order memory) {\n IERC20 tokenIn = IERC20(abi.decode(staticInput, (address)));\n\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowConditionalOrder\n function verify(\n address owner,\n address sender,\n bytes32,\n bytes32,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata _order\n ) external view {\n GPv2Order memory savedOrder = getTradeableOrder(owner, sender, ctx, staticInput, offchainInput);\n\n if (_order.buyAmount > savedOrder.buyAmount) {\n savedOrder.buyAmount = _order.buyAmount;\n }\n\n if (keccak256(abi.encode(savedOrder)) != keccak256(abi.encode(_order))) {\n revert InvalidOrderParameters(\"Verify order does not match with existing order\");\n }\n }\n\n /***************************************************************************\n Miscellaneous\n ***************************************************************************/\n\n /// @inheritdoc IERC1271\n function isValidSignature(bytes32 _hash, bytes memory signature) external view returns (bytes4) {\n (GPv2Order memory order, IComposableCow.Payload memory payload) = abi.decode(\n signature,\n (GPv2Order, IComposableCow.Payload)\n );\n\n // Forward the query to ComposableCow\n return\n composableCow.isValidSafeSignature(\n address(this),\n msg.sender,\n _hash,\n composableCow.domainSeparator(),\n bytes32(0),\n abi.encode(order),\n abi.encode(payload)\n );\n }\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public pure returns (bool) {\n // Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n if (interfaceId == _SIGNATURE_VERIFIER_MUXER_INTERFACE) {\n revert InterfaceIsSignatureVerifierMuxer();\n }\n\n return\n interfaceId == type(ICowConditionalOrder).interfaceId ||\n interfaceId == type(ICowConditionalOrderGenerator).interfaceId ||\n interfaceId == type(IERC1271).interfaceId ||\n interfaceId == type(IERC165).interfaceId;\n }\n\n /***************************************************************************\n Private Functions\n ***************************************************************************/\n\n function _getOrder(IERC20 tokenIn) private view returns (GPv2Order memory) {\n ShortOrder memory shortOrder = _orders[tokenIn];\n\n if (shortOrder.deadline == 0) {\n revert OrderNotValid(\"Order does not exist\");\n }\n\n return\n GPv2Order({\n sellToken: tokenIn,\n buyToken: shortOrder.tokenOut,\n receiver: shortOrder.receiver,\n sellAmount: tokenIn.balanceOf(address(this)),\n buyAmount: shortOrder.minAmountOut,\n validTo: shortOrder.deadline,\n appData: appData,\n feeAmount: 0,\n kind: _sellKind,\n partiallyFillable: true,\n sellTokenBalance: _tokenBalance,\n buyTokenBalance: _tokenBalance\n });\n }\n\n function _getOrderStatusAndBalance(IERC20 tokenIn) private view returns (OrderStatus, uint256) {\n ShortOrder storage shortOrder = _orders[tokenIn];\n\n uint256 deadline = shortOrder.deadline;\n\n if (deadline == 0) {\n return (OrderStatus.Nonexistent, 0);\n }\n\n uint256 balance = tokenIn.balanceOf(address(this));\n if (balance == 0) {\n return (OrderStatus.Filled, balance);\n } else if (block.timestamp > deadline) {\n return (OrderStatus.Failed, balance);\n }\n\n return (OrderStatus.Active, balance);\n }\n\n function _checkDeadline(uint256 deadline) private view {\n if (block.timestamp > deadline) {\n revert InvalidOrderParameters(\"Deadline is in the past\");\n }\n }\n\n function _checkMinAmountOut(uint256 minAmountOut) private pure {\n if (minAmountOut == 0) {\n revert InvalidOrderParameters(\"Min amount out is zero\");\n }\n }\n\n function _createCowOrder(IERC20 tokenIn) private {\n composableCow.create(\n ICowConditionalOrder.ConditionalOrderParams({\n handler: ICowConditionalOrder(address(this)),\n salt: bytes32(0),\n staticData: abi.encode(tokenIn)\n }),\n true\n );\n }\n}\n"},"contracts/ERC4626CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\nimport { CowSwapFeeBurner } from \"./CowSwapFeeBurner.sol\";\n\n/**\n * @title ERC4626CowSwapFeeBurner\n * @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract ERC4626CowSwapFeeBurner is CowSwapFeeBurner {\n error InvalidProtocolFeeSweeper();\n\n using SafeERC20 for IERC20;\n\n IProtocolFeeSweeper public immutable protocolFeeSweeper;\n\n modifier onlyProtocolFeeSweeper() {\n if (msg.sender != address(protocolFeeSweeper)) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IVault vault,\n IComposableCow composableCow,\n address vaultRelayer,\n bytes32 appData,\n string memory version\n ) CowSwapFeeBurner(vault, composableCow, vaultRelayer, appData, version) {\n if (address(_protocolFeeSweeper) == address(0)) {\n revert InvalidProtocolFeeSweeper();\n }\n\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n\n /**\n * @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n * `targetToken`, and sends the proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param minTargetTokenAmountOut The minimum `amountOut` for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external override onlyProtocolFeeSweeper nonReentrant {\n // In this case we first pull the wrapped token, unwrap, and then proceed to burn by creating an order for\n // the underlying token.\n feeToken.safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n\n // Redeem and overwrite inputs with new asset and unwrapped amount.\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n feeToken = IERC20(erc4626Token.asset());\n exactFeeTokenAmountIn = erc4626Token.redeem(exactFeeTokenAmountIn, address(this), address(this));\n\n // This case is not handled by the internal `_burn` function, but it's valid: we can consider that the token\n // has already been converted to the correct token, so we just forward the result and finish.\n if (feeToken == targetToken) {\n // We apply the slippage check, but not deadline as the order settlement is instant in this case.\n if (exactFeeTokenAmountIn < minTargetTokenAmountOut) {\n revert AmountOutBelowMin(targetToken, exactFeeTokenAmountIn, minTargetTokenAmountOut);\n }\n\n feeToken.safeTransfer(recipient, exactFeeTokenAmountIn);\n } else {\n _burn(\n pool,\n feeToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n false // pullToken\n );\n }\n }\n}\n"},"contracts/PoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\n\nimport { IPoolHelperCommon } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/// @notice Common code for helper functions that operate on a subset of pools.\nabstract contract PoolHelperCommon is IPoolHelperCommon, SingletonAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n EnumerableSet.AddressSet internal _pools;\n\n constructor(IVault vault) SingletonAuthentication(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function addPools(address[] calldata newPools) external authenticate {\n uint256 length = newPools.length;\n\n for (uint256 i = 0; i < length; i++) {\n address pool = newPools[i];\n\n // Ensure the address is a valid pool.\n if (getVault().isPoolRegistered(pool) == false) {\n revert IVaultErrors.PoolNotRegistered(pool);\n }\n\n // Call virtual function in case additional validation is needed.\n _validatePool(pool);\n\n if (_pools.add(pool) == false) {\n revert PoolAlreadyInSet(pool);\n }\n\n emit PoolAddedToSet(pool);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function removePools(address[] memory pools) public authenticate {\n uint256 length = pools.length;\n for (uint256 i = 0; i < length; i++) {\n address pool = pools[i];\n if (_pools.remove(pool) == false) {\n revert PoolNotInSet(pool);\n }\n\n emit PoolRemovedFromSet(pool);\n }\n }\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolCount() external view returns (uint256) {\n return _pools.length();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function hasPool(address pool) external view returns (bool) {\n return _pools.contains(pool);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPools(uint256 from, uint256 to) public view returns (address[] memory pools) {\n uint256 poolLength = _pools.length();\n if (from > to || to > poolLength || from >= poolLength) {\n revert IndexOutOfBounds();\n }\n\n pools = new address[](to - from);\n for (uint256 i = from; i < to; i++) {\n pools[i - from] = _pools.at(i);\n }\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n function _ensurePoolAdded(address pool) internal view {\n if (_pools.contains(pool) == false) {\n revert PoolNotInSet(pool);\n }\n }\n\n /// @dev Optional function called in addPools for additional validation.\n function _validatePool(address pool) internal view virtual {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/PoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolPauseHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolPauseHelper is IPoolPauseHelper, PoolHelperCommon {\n constructor(IVault vault) PoolHelperCommon(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolPauseHelper\n function pausePools(address[] memory pools) public authenticate {\n uint256 length = pools.length;\n for (uint256 i = 0; i < length; i++) {\n address pool = pools[i];\n _ensurePoolAdded(pool);\n\n getVault().pausePool(pool);\n }\n }\n}\n"},"contracts/PoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolSwapFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolSwapFeeHelper is IPoolSwapFeeHelper, PoolHelperCommon {\n constructor(IVault vault) PoolHelperCommon(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolSwapFeeHelper\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) public authenticate {\n _ensurePoolAdded(pool);\n\n getVault().setStaticSwapFeePercentage(pool, swapFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n /// @inheritdoc PoolHelperCommon\n function _validatePool(address pool) internal view override {\n // Pools cannot have a swap fee manager.\n if (getVault().getPoolRoleAccounts(pool).swapFeeManager != address(0)) {\n revert PoolHasSwapManager(pool);\n }\n }\n}\n"},"contracts/PriceImpactHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { CallAndRevert } from \"./CallAndRevert.sol\";\n\ncontract PriceImpactHelper is CallAndRevert {\n using FixedPoint for uint256;\n using SafeCast for *;\n\n IVault internal immutable _vault;\n IRouter internal immutable _router;\n\n constructor(IVault vault, IRouter router) {\n _vault = vault;\n _router = router;\n }\n\n /*******************************************************************************\n Price Impact\n *******************************************************************************/\n\n function calculateAddLiquidityUnbalancedPriceImpact(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) external returns (uint256 priceImpact) {\n uint256 bptAmountOut = _queryAddLiquidityUnbalanced(pool, exactAmountsIn, sender);\n uint256[] memory proportionalAmountsOut = _queryRemoveLiquidityProportional(pool, bptAmountOut, sender);\n\n // get deltas between exactAmountsIn and proportionalAmountsOut\n int256[] memory deltas = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltas[i] = proportionalAmountsOut[i].toInt256() - exactAmountsIn[i].toInt256();\n }\n\n // query add liquidity for each delta, so we know how unbalanced each amount in is in terms of BPT\n int256[] memory deltaBPTs = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltaBPTs[i] = _queryAddLiquidityUnbalancedForTokenDeltas(pool, i, deltas, sender);\n }\n\n // zero out deltas leaving only a remaining delta within a single token\n uint256 remainingDeltaIndex = _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n\n // calculate price impact ABA with remaining delta and its respective exactAmountIn\n // remaining delta is always negative, so by multiplying by -1 we get a positive number\n uint256 delta = (-deltas[remainingDeltaIndex]).toUint256();\n return delta.divDown(exactAmountsIn[remainingDeltaIndex]) / 2;\n }\n\n /*******************************************************************************\n Router Queries\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n _router.queryAddLiquidityUnbalanced.selector,\n pool,\n exactAmountsIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _queryRemoveLiquidityProportional(\n address pool,\n uint256 bptAmountOut,\n address sender\n ) internal returns (uint256[] memory) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n _router.queryRemoveLiquidityProportional.selector,\n pool,\n bptAmountOut,\n sender,\n \"\"\n )\n ),\n (uint256[])\n );\n }\n\n function _querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n _router.querySwapSingleTokenExactIn.selector,\n pool,\n tokenIn,\n tokenOut,\n amountIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountOut,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n _router.querySwapSingleTokenExactOut.selector,\n pool,\n tokenIn,\n tokenOut,\n amountOut,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n /*******************************************************************************\n Helpers\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) internal returns (int256) {\n uint256[] memory zerosWithSingleDelta = new uint256[](deltas.length);\n int256 delta = deltas[tokenIndex];\n\n if (delta == 0) {\n return 0;\n }\n\n zerosWithSingleDelta[tokenIndex] = uint256(delta > 0 ? delta : -delta);\n int256 result = int256(_queryAddLiquidityUnbalanced(pool, zerosWithSingleDelta, sender));\n\n return delta > 0 ? result : -result;\n }\n\n function _zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) internal returns (uint256) {\n // Index of closest from 0 negative number in deltaBPTs array.\n uint256 maxNegativeDeltaIndex = 0;\n IERC20[] memory poolTokens = _vault.getPoolTokens(pool);\n\n for (uint256 i = 0; i < deltas.length - 1; i++) {\n // get minPositiveDeltaIndex and maxNegativeDeltaIndex\n uint256 minPositiveDeltaIndex = _minPositiveIndex(deltaBPTs);\n maxNegativeDeltaIndex = _maxNegativeIndex(deltaBPTs);\n\n uint256 givenTokenIndex;\n uint256 resultTokenIndex;\n uint256 resultAmount;\n\n if (deltaBPTs[minPositiveDeltaIndex] < -deltaBPTs[maxNegativeDeltaIndex]) {\n givenTokenIndex = minPositiveDeltaIndex;\n resultTokenIndex = maxNegativeDeltaIndex;\n resultAmount = _querySwapSingleTokenExactIn(\n pool,\n poolTokens[givenTokenIndex],\n poolTokens[resultTokenIndex],\n deltas[givenTokenIndex].toUint256(),\n sender\n );\n } else {\n givenTokenIndex = maxNegativeDeltaIndex;\n resultTokenIndex = minPositiveDeltaIndex;\n resultAmount = _querySwapSingleTokenExactOut(\n pool,\n poolTokens[resultTokenIndex],\n poolTokens[givenTokenIndex],\n (-deltas[givenTokenIndex]).toUint256(),\n sender\n );\n }\n\n // Update deltas and deltaBPTs\n deltas[givenTokenIndex] = 0;\n deltaBPTs[givenTokenIndex] = 0;\n deltas[resultTokenIndex] += resultAmount.toInt256();\n deltaBPTs[resultTokenIndex] = _queryAddLiquidityUnbalancedForTokenDeltas(\n pool,\n resultTokenIndex,\n deltas,\n sender\n );\n }\n\n return maxNegativeDeltaIndex;\n }\n\n // returns the index of the smallest positive integer in an array - i.e. [3, 2, -2, -3] returns 1\n function _minPositiveIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 min = type(int256).max;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] > 0 && array[i] < min) {\n min = array[i];\n index = i;\n }\n }\n }\n\n // returns the index of the biggest negative integer in an array - i.e. [3, 1, -2, -3] returns 2\n function _maxNegativeIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 max = type(int256).min;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] < 0 && array[i] > max) {\n max = array[i];\n index = i;\n }\n }\n }\n}\n"},"contracts/ProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IProtocolFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract ProtocolFeeHelper is IProtocolFeeHelper, PoolHelperCommon {\n modifier withAddedPool(address pool) {\n _ensurePoolAdded(pool);\n _;\n }\n\n constructor(IVault vault) PoolHelperCommon(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external withAddedPool(pool) authenticate {\n _getProtocolFeeController().setProtocolSwapFeePercentage(pool, newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external withAddedPool(pool) authenticate {\n _getProtocolFeeController().setProtocolYieldFeePercentage(pool, newProtocolYieldFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // The protocol fee controller is upgradeable in the Vault, so we must fetch it every time.\n function _getProtocolFeeController() internal view returns (IProtocolFeeController) {\n return getVault().getProtocolFeeController();\n }\n}\n"},"contracts/ProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { FEE_SCALING_FACTOR } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport {\n IProtocolFeePercentagesProvider\n} from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\n\ncontract ProtocolFeePercentagesProvider is IProtocolFeePercentagesProvider, SingletonAuthentication {\n using SafeCast for uint256;\n\n /**\n * @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n * numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n *\n * @param protocolSwapFee The protocol swap fee\n * @param protocolYieldFee The protocol yield fee\n * @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)\n */\n struct FactoryProtocolFees {\n uint64 protocolSwapFeePercentage;\n uint64 protocolYieldFeePercentage;\n bool areFactoryFeesSet;\n }\n\n IBalancerContractRegistry private immutable _trustedContractRegistry;\n IProtocolFeeController private immutable _protocolFeeController;\n\n uint256 private immutable _maxProtocolSwapFeePercentage;\n uint256 private immutable _maxProtocolYieldFeePercentage;\n\n // Factory address => FactoryProtocolFees\n mapping(IBasePoolFactory => FactoryProtocolFees) private _factoryDefaultFeePercentages;\n\n constructor(IVault vault, IBalancerContractRegistry trustedContractRegistry) SingletonAuthentication(vault) {\n IProtocolFeeController protocolFeeController = vault.getProtocolFeeController();\n\n _protocolFeeController = protocolFeeController;\n _trustedContractRegistry = trustedContractRegistry;\n\n // Read the maximum percentages from the `protocolFeeController`.\n _maxProtocolSwapFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_SWAP_FEE_PERCENTAGE();\n _maxProtocolYieldFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_YIELD_FEE_PERCENTAGE();\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getProtocolFeeController() external view returns (IProtocolFeeController) {\n return _protocolFeeController;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry) {\n return _trustedContractRegistry;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage) {\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n protocolSwapFeePercentage = factoryFees.protocolSwapFeePercentage;\n protocolYieldFeePercentage = factoryFees.protocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external authenticate {\n // Validate the fee percentages; don't store values that the `ProtocolFeeCollector` will reject.\n if (protocolSwapFeePercentage > _maxProtocolSwapFeePercentage) {\n revert IProtocolFeeController.ProtocolSwapFeePercentageTooHigh();\n }\n\n if (protocolYieldFeePercentage > _maxProtocolYieldFeePercentage) {\n revert IProtocolFeeController.ProtocolYieldFeePercentageTooHigh();\n }\n\n // Ensure the factory is valid.\n if (_trustedContractRegistry.isActiveBalancerContract(ContractType.POOL_FACTORY, factory) == false) {\n revert UnknownFactory(factory);\n }\n\n // Ensure precision checks will pass.\n _ensureValidPrecision(protocolSwapFeePercentage);\n _ensureValidPrecision(protocolYieldFeePercentage);\n\n // Store the default fee percentages, and mark the factory as registered.\n _factoryDefaultFeePercentages[IBasePoolFactory(factory)] = FactoryProtocolFees({\n protocolSwapFeePercentage: protocolSwapFeePercentage.toUint64(),\n protocolYieldFeePercentage: protocolYieldFeePercentage.toUint64(),\n areFactoryFeesSet: true\n });\n\n emit FactorySpecificProtocolFeePercentagesSet(factory, protocolSwapFeePercentage, protocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external {\n // Note that unless the factory fees were previously set in `setFactorySpecificProtocolFeePercentages` above,\n // this getter will revert. The fee setter function validates the factory with the `BalancerContractRegistry`,\n // so we know it is a valid Balancer pool factory.\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n for (uint256 i = 0; i < pools.length; ++i) {\n address currentPool = pools[i];\n\n // We know from the logic above that the factory is valid. Now also check that the given pool actually\n // comes from that factory.\n if (IBasePoolFactory(factory).isPoolFromFactory(currentPool) == false) {\n revert PoolNotFromFactory(currentPool, factory);\n }\n\n _setPoolProtocolFees(\n currentPool,\n factoryFees.protocolSwapFeePercentage,\n factoryFees.protocolYieldFeePercentage\n );\n }\n }\n\n function _getValidatedProtocolFees(address factory) private view returns (FactoryProtocolFees memory factoryFees) {\n factoryFees = _factoryDefaultFeePercentages[IBasePoolFactory(factory)];\n\n if (factoryFees.areFactoryFeesSet == false) {\n revert FactoryFeesNotSet(factory);\n }\n }\n\n /**\n * @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n * to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`.\n */\n function _setPoolProtocolFees(\n address pool,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) private {\n _protocolFeeController.setProtocolSwapFeePercentage(pool, protocolSwapFeePercentage);\n _protocolFeeController.setProtocolYieldFeePercentage(pool, protocolYieldFeePercentage);\n }\n\n /**\n * @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n * deployed version of the contract.\n */\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"contracts/ProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n * @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n * `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n * a recipient address.\n *\n * An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n * collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n * amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n * convert, and forward them to the final recipient.\n */\ncontract ProtocolFeeSweeper is IProtocolFeeSweeper, SingletonAuthentication, ReentrancyGuardTransient {\n using SafeERC20 for IERC20;\n\n /// @notice All pool tokens are ERC20, so this contract should not handle ETH.\n error CannotReceiveEth();\n\n // Preferred token for receiving protocol fees. Passed to the fee burner as the target of fee token swaps.\n IERC20 private _targetToken;\n\n // Final destination of the collected protocol fees.\n address private _feeRecipient;\n\n // Allowlist of valid protocol fee burners.\n mapping(IProtocolFeeBurner feeBurner => bool isApproved) private _protocolFeeBurners;\n\n /// @notice Allows calls from fee recipient or governance allowed accounts (non-exclusive).\n modifier onlyFeeRecipientOrGovernance() {\n _ensureAuthenticatedByRole(address(this), _feeRecipient);\n _;\n }\n\n // The default configuration on deployment simply forwards all fee tokens to the `feeRecipient`.\n constructor(IVault vault, address feeRecipient) SingletonAuthentication(vault) {\n _setFeeRecipient(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, feeToken, minTargetTokenAmountOut, deadline, feeBurner, false);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, IERC20(address(feeToken)), minTargetTokenAmountOut, deadline, feeBurner, true);\n }\n\n function _sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner,\n bool shouldUnwrap\n ) internal {\n bool feeBurnerProvided = _getValidFeeBurner(feeBurner);\n\n uint256 existingBalance = feeToken.balanceOf(address(this));\n\n // Withdraw protocol fees to this contract. Note that governance will need to grant this contract permission\n // to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController.\n IProtocolFeeController feeController = getProtocolFeeController();\n\n // Transfer any pending fees from the Vault to the ProtocolFeeController, and allocate the protocol and pool\n // creator portions.\n feeController.collectAggregateFees(pool);\n\n // Withdraw the protocol portion of the fees to this contract (requires permission).\n feeController.withdrawProtocolFeesForToken(pool, address(this), feeToken);\n\n uint256 withdrawnBalance = feeToken.balanceOf(address(this)) - existingBalance;\n\n if (withdrawnBalance > 0) {\n if (feeBurnerProvided) {\n IERC20 targetToken = _targetToken;\n\n // If the fee token is already the target, there's no need to swap. Simply transfer it.\n if (feeToken == targetToken) {\n if (shouldUnwrap) {\n revert UnwrapIsNotAllowed();\n }\n\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n } else {\n if (shouldUnwrap) {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n\n feeToken = IERC20(erc4626Token.asset());\n withdrawnBalance = erc4626Token.redeem(withdrawnBalance, address(this), address(this));\n }\n\n // We must revert if this allowance is not entirely consumed by the burner, to avoid exploitable\n // \"hanging approvals.\" The order may be asynchronous, but it must pull the tokens immediately.\n feeToken.forceApprove(address(feeBurner), withdrawnBalance);\n // This is asynchronous; the burner will complete the action and emit an event.\n feeBurner.burn(\n pool,\n feeToken,\n withdrawnBalance,\n targetToken,\n minTargetTokenAmountOut,\n _feeRecipient,\n deadline\n );\n\n if (feeToken.allowance(address(this), address(feeBurner)) > 0) {\n revert BurnerDidNotConsumeAllowance();\n }\n }\n } else {\n // If no burner has been set, fall back on direct transfer of the fee token.\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n }\n }\n }\n\n function _getValidFeeBurner(IProtocolFeeBurner feeBurner) private view returns (bool feeBurnerProvided) {\n feeBurnerProvided = address(feeBurner) != address(0);\n\n // Allow passing the zero address (no burner); this will simply transfer the fee tokens directly (e.g., if\n // there is no burner available for a given token).\n if (feeBurnerProvided) {\n if (_protocolFeeBurners[feeBurner]) {\n if (address(_targetToken) == address(0)) {\n revert InvalidTargetToken();\n }\n } else {\n revert UnsupportedProtocolFeeBurner(address(feeBurner));\n }\n }\n }\n\n function _transferFeeToken(address pool, IERC20 feeToken, uint256 withdrawnTokenBalance) private {\n address recipient = _feeRecipient;\n feeToken.safeTransfer(recipient, withdrawnTokenBalance);\n\n emit ProtocolFeeSwept(pool, feeToken, withdrawnTokenBalance, recipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getProtocolFeeController() public view returns (IProtocolFeeController) {\n return getVault().getProtocolFeeController();\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getTargetToken() external view returns (IERC20) {\n return _targetToken;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getFeeRecipient() external view returns (address) {\n return _feeRecipient;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool) {\n return _protocolFeeBurners[IProtocolFeeBurner(protocolFeeBurner)];\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeSweeper\n function setFeeRecipient(address feeRecipient) external onlyFeeRecipientOrGovernance {\n _setFeeRecipient(feeRecipient);\n }\n\n function _setFeeRecipient(address feeRecipient) internal {\n // Best effort to at least ensure the fee recipient isn't the zero address (so it doesn't literally burn all\n // protocol fees). Governance must ensure this is a valid address, as sweeping is permissionless.\n //\n // We could use a 2-step claim process like the `TimelockAuthorizer` here, but the consequences here are less\n // severe, so that might be overkill. Nothing can be bricked; the worst that can happen is loss of protocol\n // fees until the recipient is updated again.\n if (feeRecipient == address(0)) {\n revert InvalidFeeRecipient();\n }\n\n _feeRecipient = feeRecipient;\n\n emit FeeRecipientSet(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function setTargetToken(IERC20 targetToken) external onlyFeeRecipientOrGovernance {\n _targetToken = targetToken;\n\n emit TargetTokenSet(targetToken);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner]) {\n revert ProtocolFeeBurnerAlreadyAdded(address(protocolFeeBurner));\n }\n\n // Since the zero address is a sentinel value indicating no burner should be used, do not allow adding it.\n if (address(protocolFeeBurner) == address(0)) {\n revert InvalidProtocolFeeBurner();\n }\n\n _protocolFeeBurners[protocolFeeBurner] = true;\n\n emit ProtocolFeeBurnerAdded(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner] == false) {\n revert ProtocolFeeBurnerNotAdded(address(protocolFeeBurner));\n }\n\n _protocolFeeBurners[protocolFeeBurner] = false;\n\n emit ProtocolFeeBurnerRemoved(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function recoverProtocolFees(IERC20[] memory feeTokens) external nonReentrant {\n if (msg.sender != _feeRecipient) {\n revert SenderNotAllowed();\n }\n\n for (uint256 i = 0; i < feeTokens.length; ++i) {\n IERC20 feeToken = feeTokens[i];\n uint256 tokenBalance = feeToken.balanceOf(address(this));\n\n if (tokenBalance > 0) {\n feeToken.safeTransfer(msg.sender, tokenBalance);\n }\n }\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n // Maybe these aren't needed, but given the general sensitivity of this contract, preemptively disallow any\n // ETH-related shenanigans. Tokens are always ERC20, so there should be no ETH involved in any operations.\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n fallback() external payable {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n revert(\"Not implemented\");\n }\n}\n"},"contracts/test/FeedMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { AggregatorV3Interface } from \"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\";\n\ncontract FeedMock is AggregatorV3Interface {\n uint256 internal _decimals;\n uint256 internal _lastAnswer;\n uint256 internal _lastUpdatedAt;\n\n constructor(uint256 decimals_) {\n _decimals = decimals_;\n }\n\n function setDecimals(uint8 decimals_) external {\n _decimals = decimals_;\n }\n\n function setLastRoundData(uint256 lastAnswer, uint256 lastUpdatedAt) external {\n _lastAnswer = lastAnswer;\n _lastUpdatedAt = lastUpdatedAt;\n }\n\n function decimals() external view returns (uint8) {\n return uint8(_decimals);\n }\n\n function description() external pure returns (string memory) {\n return \"Mock Chainlink Feed\";\n }\n\n function version() external pure returns (uint256) {\n return 0;\n }\n\n function getRoundData(\n uint80\n )\n external\n pure\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\n {\n return (0, 0, 0, 0, 0);\n }\n\n function latestRoundData()\n external\n view\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\n {\n return (0, int256(_lastAnswer), 0, _lastUpdatedAt, 0);\n }\n}\n"},"contracts/test/PriceImpactHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\n\nimport { PriceImpactHelper } from \"../PriceImpactHelper.sol\";\n\ncontract PriceImpactHelperMock is PriceImpactHelper {\n constructor(IVault vault, IRouter router) PriceImpactHelper(vault, router) {}\n\n function queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) external returns (int256 deltaBPT) {\n return _queryAddLiquidityUnbalancedForTokenDeltas(pool, tokenIndex, deltas, sender);\n }\n\n function zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) external returns (uint256) {\n return _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n }\n\n function minPositiveIndex(int256[] memory array) external pure returns (uint256) {\n return _minPositiveIndex(array);\n }\n\n function maxNegativeIndex(int256[] memory array) external pure returns (uint256) {\n return _maxNegativeIndex(array);\n }\n}\n"},"contracts/test/ProtocolFeeBurnerMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\n\nimport { ERC20TestToken } from \"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\ncontract ProtocolFeeBurnerMock is IProtocolFeeBurner {\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n\n uint256 private _tokenRatio = FixedPoint.ONE;\n\n bool transferFromEnabled = true;\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external {\n if (block.timestamp > deadline) {\n revert SwapDeadline();\n }\n\n if (transferFromEnabled) {\n feeToken.safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n }\n\n // Simulate the swap by minting the same amount of target to the recipient.\n ERC20TestToken(address(targetToken)).mint(recipient, exactFeeTokenAmountIn);\n\n uint256 targetTokenAmount = exactFeeTokenAmountIn.mulDown(_tokenRatio);\n if (targetTokenAmount < minAmountOut) {\n revert AmountOutBelowMin(targetToken, targetTokenAmount, minAmountOut);\n }\n\n // Just emit the event, simulating the tokens being exchanged at 1-to-1.\n emit ProtocolFeeBurned(pool, feeToken, exactFeeTokenAmountIn, targetToken, targetTokenAmount, recipient);\n }\n\n function setTokenRatio(uint256 ratio) external {\n _tokenRatio = ratio;\n }\n\n function setTransferFromEnabled(bool enabled) external {\n transferFromEnabled = enabled;\n }\n}\n"},"contracts/test/VaultMockForFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\n\ncontract VaultMockForFeeSweeper is IAuthorizer {\n using SafeERC20 for IERC20;\n\n mapping(address => bool) public owners;\n\n constructor() {\n owners[msg.sender] = true;\n }\n\n modifier onlyOwner() {\n require(owners[msg.sender], \"VaultMockForFeeSweeper: Not an owner\");\n _;\n }\n\n function getAuthorizer() external view returns (IAuthorizer authorizer) {\n return IAuthorizer(address(this));\n }\n\n function canPerform(bytes32, address account, address) external view returns (bool) {\n return owners[account];\n }\n\n function canPerform(bytes32, address account) external view returns (bool) {\n return owners[account];\n }\n\n function addOwner(address owner_) external onlyOwner {\n owners[owner_] = true;\n }\n\n function removeOwner(address owner_) external onlyOwner {\n owners[owner_] = false;\n }\n\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController) {\n return IProtocolFeeController(address(this));\n }\n\n function collectAggregateFees(address) external {}\n\n function withdrawProtocolFeesForToken(address, address recipient, IERC20 token) external onlyOwner {\n token.safeTransfer(recipient, token.balanceOf(address(this)));\n }\n}\n"},"contracts/test/WeightedLPOracleMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { AggregatorV3Interface } from \"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\";\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IWeightedPool } from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\";\n\nimport { WeightedLPOracle } from \"../WeightedLPOracle.sol\";\n\ncontract WeightedLPOracleMock is WeightedLPOracle {\n constructor(\n IVault vault_,\n IWeightedPool pool_,\n AggregatorV3Interface[] memory feeds,\n uint256 version_\n ) WeightedLPOracle(vault_, pool_, feeds, version_) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function calculateFeedTokenDecimalScalingFactor(AggregatorV3Interface feed) public view returns (uint256) {\n return _computeFeedTokenDecimalScalingFactor(feed);\n }\n}\n"},"contracts/WeightedLPOracle.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { AggregatorV3Interface } from \"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\";\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IWeightedLPOracle } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\";\nimport { IWeightedPool } from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\";\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\ncontract WeightedLPOracle is IWeightedLPOracle, AggregatorV3Interface {\n using FixedPoint for uint256;\n using SafeCast for *;\n\n error UnsupportedDecimals();\n\n uint256 internal constant _WAD_DECIMALS = 18;\n\n IVault internal immutable _vault;\n IWeightedPool public immutable pool;\n uint256 internal immutable _version;\n uint256 internal immutable _totalTokens;\n string internal _description;\n\n uint256 internal immutable _weight0;\n uint256 internal immutable _weight1;\n uint256 internal immutable _weight2;\n uint256 internal immutable _weight3;\n uint256 internal immutable _weight4;\n uint256 internal immutable _weight5;\n uint256 internal immutable _weight6;\n uint256 internal immutable _weight7;\n\n AggregatorV3Interface internal immutable _feedToken0;\n AggregatorV3Interface internal immutable _feedToken1;\n AggregatorV3Interface internal immutable _feedToken2;\n AggregatorV3Interface internal immutable _feedToken3;\n AggregatorV3Interface internal immutable _feedToken4;\n AggregatorV3Interface internal immutable _feedToken5;\n AggregatorV3Interface internal immutable _feedToken6;\n AggregatorV3Interface internal immutable _feedToken7;\n\n uint256 internal immutable _feedToken0DecimalScalingFactor;\n uint256 internal immutable _feedToken1DecimalScalingFactor;\n uint256 internal immutable _feedToken2DecimalScalingFactor;\n uint256 internal immutable _feedToken3DecimalScalingFactor;\n uint256 internal immutable _feedToken4DecimalScalingFactor;\n uint256 internal immutable _feedToken5DecimalScalingFactor;\n uint256 internal immutable _feedToken6DecimalScalingFactor;\n uint256 internal immutable _feedToken7DecimalScalingFactor;\n\n constructor(IVault vault_, IWeightedPool pool_, AggregatorV3Interface[] memory feeds, uint256 version_) {\n _version = version_;\n _vault = vault_;\n pool = pool_;\n\n IERC20[] memory tokens = vault_.getPoolTokens(address(pool_));\n uint256[] memory weights = pool_.getNormalizedWeights();\n uint totalTokens = tokens.length;\n\n _totalTokens = totalTokens;\n _description = string.concat(IERC20Metadata(address(pool)).symbol(), \"/USD\");\n\n InputHelpers.ensureInputLengthMatch(totalTokens, feeds.length);\n\n // prettier-ignore\n {\n _feedToken0 = feeds[0];\n _weight0 = weights[0];\n _feedToken0DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[0]);\n\n _feedToken1 = feeds[1];\n _weight1 = weights[1];\n _feedToken1DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[1]);\n \n if (totalTokens > 2) { \n _feedToken2 = feeds[2];\n _weight2 = weights[2];\n _feedToken2DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[2]);\n }\n if (totalTokens > 3) { \n _feedToken3 = feeds[3];\n _weight3 = weights[3];\n _feedToken3DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[3]);\n }\n if (totalTokens > 4) {\n _feedToken4 = feeds[4];\n _weight4 = weights[4];\n _feedToken4DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[4]);\n }\n if (totalTokens > 5) {\n _feedToken5 = feeds[5];\n _weight5 = weights[5];\n _feedToken5DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[5]);\n }\n if (totalTokens > 6) {\n _feedToken6 = feeds[6];\n _weight6 = weights[6];\n _feedToken6DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[6]);\n }\n if (totalTokens > 7) {\n _feedToken7 = feeds[7];\n _weight7 = weights[7];\n _feedToken7DecimalScalingFactor = _computeFeedTokenDecimalScalingFactor(feeds[7]);\n }\n }\n }\n\n /**\n * @notice Get the version of the oracle.\n * @dev Declared in AggregatorV3Interface.\n * @return version The numerical version number\n */\n function version() external view returns (uint256) {\n return _version;\n }\n\n /**\n * @notice Get the number of decimals present in the response value.\n * @dev Declared in AggregatorV3Interface.\n * @dev This is hard-coded to 18 decimals.\n * @return decimals The number of decimals\n */\n function decimals() external pure returns (uint8) {\n return uint8(_WAD_DECIMALS);\n }\n\n /**\n * @notice Get the description of the underlying aggregator that the proxy points to.\n * @dev Declared in AggregatorV3Interface.\n * @return description The description as a string\n */\n function description() external view returns (string memory) {\n return _description;\n }\n\n /**\n * @notice Get data about a specific round, using the roundId.\n * @dev Declared in AggregatorV3Interface. This is unused, and always returns all zeros.\n * @return roundId The round ID\n * @return answer The answer for this round\n * @return startedAt Timestamp when the round started\n * @return updatedAt Timestamp when the round was updated\n * @return answeredInRound [Deprecated] - Previously used when answers could take multiple rounds to be computed\n */\n function getRoundData(\n uint80 /* _roundId */\n )\n external\n pure\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\n {\n return (0, 0, 0, 0, 0);\n }\n\n /**\n * @notice Get the data from the latest round.\n * @dev Declared in AggregatorV3Interface.\n * @return roundId The round ID\n * @return answer The answer for this round\n * @return startedAt Timestamp when the round started\n * @return updatedAt Timestamp when the round was updated\n * @return answeredInRound [Deprecated] - Previously used when answers could take multiple rounds to be computed\n */\n function latestRoundData()\n external\n view\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\n {\n (int256[] memory prices, uint256 _updatedAt) = getFeedData();\n\n uint256 tvl = calculateTVL(prices);\n uint256 totalSupply = _vault.totalSupply(address(pool));\n\n uint256 lpPrice = tvl.divUp(totalSupply);\n\n return (0, lpPrice.toInt256(), 0, _updatedAt, 0);\n }\n\n /// @inheritdoc IWeightedLPOracle\n function calculateTVL(int256[] memory prices) public view returns (uint256 tvl) {\n uint256 totalTokens = _totalTokens;\n\n uint256[] memory weights = _getWeights(totalTokens);\n uint256[] memory lastBalancesLiveScaled18 = _vault.getCurrentLiveBalances(address(pool));\n\n /**********************************************************************************************\n // We know that the normalized value of each token in the pool is equal:\n // C = (P1 * B1 / W1) = (P2 * B2 / W2) = ... = (Pn * Bn / Wn)\n //\n // Where:\n // n = number of tokens\n // Pi = market price of token i\n // Bi = balance of token i\n // Wi = normalized weight of token i (sum of all Wi == 1)\n // C = common normalized value across tokens\n //\n // From this, we can express the balance of token i:\n // Bi = (C * Wi) / Pi\n //\n // The total value locked (TVL) is the sum of all token values:\n // TVL = Σ (Bi * Pi)\n // Substituting Bi:\n // TVL = Σ ((C * Wi / Pi) * Pi) = C * Σ(Wi) = C\n // C = TVL\n //\n // So:\n // Bi = (TVL * Wi) / Pi\n //\n // The invariant of the WeightedPool pool is defined as:\n // k = Π (Bi^Wi)\n //\n // Substituting Bi and using the fact that Σ(Wi) = 1:\n // k = Π ((TVL * Wi / Pi)^Wi)\n // = TVL^Σ(Wi) * Π((Wi / Pi)^Wi)\n // = TVL * Π((Wi / Pi)^Wi)\n //\n // Solving for TVL:\n // TVL = k * Π((Pi / Wi)^Wi)\n **********************************************************************************************/\n\n /**********************************************************************************************\n // invariant _____ //\n // wi = weight index i | | wi //\n // pi = price index i k * | | (pi/wi) ^ = tvl //\n // k = invariant //\n **********************************************************************************************/\n\n uint256 k = pool.computeInvariant(lastBalancesLiveScaled18, Rounding.ROUND_UP);\n\n tvl = FixedPoint.ONE;\n for (uint256 i = 0; i < totalTokens; i++) {\n tvl = tvl.mulDown(prices[i].toUint256().divDown(weights[i]).powDown(weights[i]));\n }\n\n tvl = tvl.mulDown(k);\n }\n\n /// @inheritdoc IWeightedLPOracle\n function getFeedData() public view returns (int256[] memory prices, uint256 updatedAt) {\n uint256 totalTokens = _totalTokens;\n AggregatorV3Interface[] memory feeds = _getFeeds(totalTokens);\n uint256[] memory feedDecimalScalingFactors = _getFeedTokenDecimalScalingFactors(totalTokens);\n\n prices = new int256[](totalTokens);\n\n updatedAt = type(uint256).max;\n for (uint256 i = 0; i < totalTokens; i++) {\n (, int256 answer, , uint256 feedUpdatedAt, ) = feeds[i].latestRoundData();\n prices[i] = answer * feedDecimalScalingFactors[i].toInt256();\n\n updatedAt = updatedAt < feedUpdatedAt ? updatedAt : feedUpdatedAt;\n }\n }\n\n /// @inheritdoc IWeightedLPOracle\n function getFeeds() external view returns (AggregatorV3Interface[] memory) {\n return _getFeeds(_totalTokens);\n }\n\n /// @inheritdoc IWeightedLPOracle\n function getFeedTokenDecimalScalingFactors() external view returns (uint256[] memory) {\n return _getFeedTokenDecimalScalingFactors(_totalTokens);\n }\n\n /// @inheritdoc IWeightedLPOracle\n function getWeights() external view returns (uint256[] memory) {\n return _getWeights(_totalTokens);\n }\n\n function _computeFeedTokenDecimalScalingFactor(AggregatorV3Interface feed) internal view returns (uint256) {\n uint256 feedDecimals = feed.decimals();\n\n if (feedDecimals > _WAD_DECIMALS) {\n revert UnsupportedDecimals();\n }\n\n return 10 ** (_WAD_DECIMALS - feedDecimals);\n }\n\n function _getFeeds(uint256 totalTokens) internal view virtual returns (AggregatorV3Interface[] memory) {\n AggregatorV3Interface[] memory feeds = new AggregatorV3Interface[](totalTokens);\n\n // prettier-ignore\n {\n feeds[0] = _feedToken0;\n feeds[1] = _feedToken1;\n if (totalTokens > 2) { feeds[2] = _feedToken2; } else { return feeds; }\n if (totalTokens > 3) { feeds[3] = _feedToken3; } else { return feeds; }\n if (totalTokens > 4) { feeds[4] = _feedToken4; } else { return feeds; }\n if (totalTokens > 5) { feeds[5] = _feedToken5; } else { return feeds; }\n if (totalTokens > 6) { feeds[6] = _feedToken6; } else { return feeds; }\n if (totalTokens > 7) { feeds[7] = _feedToken7; }\n }\n\n return feeds;\n }\n\n function _getFeedTokenDecimalScalingFactors(uint256 totalTokens) internal view returns (uint256[] memory) {\n uint256[] memory feedTokenDecimalScalingFactors = new uint256[](totalTokens);\n\n // prettier-ignore\n {\n feedTokenDecimalScalingFactors[0] = _feedToken0DecimalScalingFactor;\n feedTokenDecimalScalingFactors[1] = _feedToken1DecimalScalingFactor;\n if (totalTokens > 2) { feedTokenDecimalScalingFactors[2] = _feedToken2DecimalScalingFactor; } \n else { return feedTokenDecimalScalingFactors; }\n if (totalTokens > 3) { feedTokenDecimalScalingFactors[3] = _feedToken3DecimalScalingFactor; }\n else { return feedTokenDecimalScalingFactors; }\n if (totalTokens > 4) { feedTokenDecimalScalingFactors[4] = _feedToken4DecimalScalingFactor; }\n else { return feedTokenDecimalScalingFactors; }\n if (totalTokens > 5) { feedTokenDecimalScalingFactors[5] = _feedToken5DecimalScalingFactor; } \n else { return feedTokenDecimalScalingFactors; }\n if (totalTokens > 6) { feedTokenDecimalScalingFactors[6] = _feedToken6DecimalScalingFactor; } \n else { return feedTokenDecimalScalingFactors; }\n if (totalTokens > 7) { feedTokenDecimalScalingFactors[7] = _feedToken7DecimalScalingFactor; }\n }\n\n return feedTokenDecimalScalingFactors;\n }\n\n function _getWeights(uint256 totalTokens) internal view returns (uint256[] memory) {\n uint256[] memory weights = new uint256[](totalTokens);\n\n // prettier-ignore\n {\n weights[0] = _weight0;\n weights[1] = _weight1;\n if (totalTokens > 2) { weights[2] = _weight2; } else { return weights; }\n if (totalTokens > 3) { weights[3] = _weight3; } else { return weights; }\n if (totalTokens > 4) { weights[4] = _weight4; } else { return weights; }\n if (totalTokens > 5) { weights[5] = _weight5; } else { return weights; }\n if (totalTokens > 6) { weights[6] = _weight6; } else { return weights; }\n if (totalTokens > 7) { weights[7] = _weight7; }\n }\n\n return weights;\n }\n}\n"},"contracts/WeightedLPOracleFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { AggregatorV3Interface } from \"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\";\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IWeightedLPOracle } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\";\nimport {\n IWeightedLPOracleFactory\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol\";\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { IWeightedPool } from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\";\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { WeightedLPOracle } from \"./WeightedLPOracle.sol\";\n\ncontract WeightedLPOracleFactory is IWeightedLPOracleFactory, SingletonAuthentication {\n uint256 internal _oracleVersion;\n mapping(IWeightedPool => IWeightedLPOracle) internal _oracles;\n\n constructor(IVault vault, uint256 oracleVersion) SingletonAuthentication(vault) {\n _oracleVersion = oracleVersion;\n }\n\n function create(\n IWeightedPool pool,\n AggregatorV3Interface[] memory feeds\n ) external authenticate returns (IWeightedLPOracle oracle) {\n oracle = new WeightedLPOracle(getVault(), pool, feeds, _oracleVersion);\n\n _oracles[pool] = oracle;\n emit WeightedLPOracleCreated(pool, oracle, _oracleVersion);\n }\n\n function getOracle(IWeightedPool pool) external view returns (IWeightedLPOracle oracle) {\n oracle = _oracles[pool];\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","exportedSymbols":{"IBasePool":[1059],"IERC20":[9632],"IWeightedPool":[66],"WeightedPoolDynamicData":[35],"WeightedPoolImmutableData":[17]},"id":67,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":67,"sourceUnit":9633,"src":"72:72:0","symbolAliases":[{"foreign":{"id":2,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"../vault/IBasePool.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":67,"sourceUnit":1060,"src":"146:51:0","symbolAliases":[{"foreign":{"id":4,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1059,"src":"155:9:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"WeightedPoolImmutableData","documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"199:375:0","text":" @notice Weighted Pool data that cannot change after deployment.\n @param tokens Pool tokens, sorted in token registration order\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @param normalizedWeights The token weights, sorted in token registration order"},"id":17,"members":[{"constant":false,"id":10,"mutability":"mutable","name":"tokens","nameLocation":"623:6:0","nodeType":"VariableDeclaration","scope":17,"src":"614:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8,"nodeType":"UserDefinedTypeName","pathNode":{"id":7,"name":"IERC20","nameLocations":["614:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"614:6:0"},"referencedDeclaration":9632,"src":"614:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9,"nodeType":"ArrayTypeName","src":"614:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":13,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"645:21:0","nodeType":"VariableDeclaration","scope":17,"src":"635:31:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11,"name":"uint256","nodeType":"ElementaryTypeName","src":"635:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12,"nodeType":"ArrayTypeName","src":"635:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16,"mutability":"mutable","name":"normalizedWeights","nameLocation":"682:17:0","nodeType":"VariableDeclaration","scope":17,"src":"672:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15,"nodeType":"ArrayTypeName","src":"672:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"WeightedPoolImmutableData","nameLocation":"582:25:0","nodeType":"StructDefinition","scope":67,"src":"575:127:0","visibility":"public"},{"canonicalName":"WeightedPoolDynamicData","documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"704:1121:0","text":" @notice Snapshot of current Weighted Pool data that can change.\n @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate"},"id":35,"members":[{"constant":false,"id":21,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"1873:20:0","nodeType":"VariableDeclaration","scope":35,"src":"1863:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19,"name":"uint256","nodeType":"ElementaryTypeName","src":"1863:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20,"nodeType":"ArrayTypeName","src":"1863:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":24,"mutability":"mutable","name":"tokenRates","nameLocation":"1909:10:0","nodeType":"VariableDeclaration","scope":35,"src":"1899:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":22,"name":"uint256","nodeType":"ElementaryTypeName","src":"1899:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23,"nodeType":"ArrayTypeName","src":"1899:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"1933:23:0","nodeType":"VariableDeclaration","scope":35,"src":"1925:31:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28,"mutability":"mutable","name":"totalSupply","nameLocation":"1970:11:0","nodeType":"VariableDeclaration","scope":35,"src":"1962:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27,"name":"uint256","nodeType":"ElementaryTypeName","src":"1962:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"1992:17:0","nodeType":"VariableDeclaration","scope":35,"src":"1987:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29,"name":"bool","nodeType":"ElementaryTypeName","src":"1987:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":32,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2020:12:0","nodeType":"VariableDeclaration","scope":35,"src":"2015:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31,"name":"bool","nodeType":"ElementaryTypeName","src":"2015:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2043:20:0","nodeType":"VariableDeclaration","scope":35,"src":"2038:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33,"name":"bool","nodeType":"ElementaryTypeName","src":"2038:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"WeightedPoolDynamicData","nameLocation":"1833:23:0","nodeType":"StructDefinition","scope":67,"src":"1826:240:0","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":37,"name":"IBasePool","nameLocations":["2137:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":1059,"src":"2137:9:0"},"id":38,"nodeType":"InheritanceSpecifier","src":"2137:9:0"}],"canonicalName":"IWeightedPool","contractDependencies":[],"contractKind":"interface","documentation":{"id":36,"nodeType":"StructuredDocumentation","src":"2068:42:0","text":"@notice Full Weighted pool interface."},"fullyImplemented":false,"id":66,"linearizedBaseContracts":[66,1059,2281,2265],"name":"IWeightedPool","nameLocation":"2120:13:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":39,"nodeType":"StructuredDocumentation","src":"2153:87:0","text":"@notice Indicates that one of the pool tokens' weight is below the minimum allowed."},"errorSelector":"bd393583","id":41,"name":"MinWeight","nameLocation":"2251:9:0","nodeType":"ErrorDefinition","parameters":{"id":40,"nodeType":"ParameterList","parameters":[],"src":"2260:2:0"},"src":"2245:18:0"},{"documentation":{"id":42,"nodeType":"StructuredDocumentation","src":"2269:85:0","text":"@notice Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE."},"errorSelector":"39cf114e","id":44,"name":"NormalizedWeightInvariant","nameLocation":"2365:25:0","nodeType":"ErrorDefinition","parameters":{"id":43,"nodeType":"ParameterList","parameters":[],"src":"2390:2:0"},"src":"2359:34:0"},{"documentation":{"id":45,"nodeType":"StructuredDocumentation","src":"2399:146:0","text":" @notice Get the normalized weights.\n @return normalizedWeights The normalized weights, sorted in token registration order"},"functionSelector":"f89f27ed","id":51,"implemented":false,"kind":"function","modifiers":[],"name":"getNormalizedWeights","nameLocation":"2559:20:0","nodeType":"FunctionDefinition","parameters":{"id":46,"nodeType":"ParameterList","parameters":[],"src":"2579:2:0"},"returnParameters":{"id":50,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49,"mutability":"mutable","name":"normalizedWeights","nameLocation":"2622:17:0","nodeType":"VariableDeclaration","scope":51,"src":"2605:34:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47,"name":"uint256","nodeType":"ElementaryTypeName","src":"2605:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48,"nodeType":"ArrayTypeName","src":"2605:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2604:36:0"},"scope":66,"src":"2550:91:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":52,"nodeType":"StructuredDocumentation","src":"2647:167:0","text":" @notice Get dynamic pool data relevant to swap/add/remove calculations.\n @return data A struct containing all dynamic weighted pool parameters"},"functionSelector":"c0bc6f33","id":58,"implemented":false,"kind":"function","modifiers":[],"name":"getWeightedPoolDynamicData","nameLocation":"2828:26:0","nodeType":"FunctionDefinition","parameters":{"id":53,"nodeType":"ParameterList","parameters":[],"src":"2854:2:0"},"returnParameters":{"id":57,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"mutability":"mutable","name":"data","nameLocation":"2911:4:0","nodeType":"VariableDeclaration","scope":58,"src":"2880:35:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$35_memory_ptr","typeString":"struct WeightedPoolDynamicData"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"WeightedPoolDynamicData","nameLocations":["2880:23:0"],"nodeType":"IdentifierPath","referencedDeclaration":35,"src":"2880:23:0"},"referencedDeclaration":35,"src":"2880:23:0","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$35_storage_ptr","typeString":"struct WeightedPoolDynamicData"}},"visibility":"internal"}],"src":"2879:37:0"},"scope":66,"src":"2819:98:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":59,"nodeType":"StructuredDocumentation","src":"2923:171:0","text":" @notice Get immutable pool data relevant to swap/add/remove calculations.\n @return data A struct containing all immutable weighted pool parameters"},"functionSelector":"53b79bd7","id":65,"implemented":false,"kind":"function","modifiers":[],"name":"getWeightedPoolImmutableData","nameLocation":"3108:28:0","nodeType":"FunctionDefinition","parameters":{"id":60,"nodeType":"ParameterList","parameters":[],"src":"3136:2:0"},"returnParameters":{"id":64,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"data","nameLocation":"3195:4:0","nodeType":"VariableDeclaration","scope":65,"src":"3162:37:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$17_memory_ptr","typeString":"struct WeightedPoolImmutableData"},"typeName":{"id":62,"nodeType":"UserDefinedTypeName","pathNode":{"id":61,"name":"WeightedPoolImmutableData","nameLocations":["3162:25:0"],"nodeType":"IdentifierPath","referencedDeclaration":17,"src":"3162:25:0"},"referencedDeclaration":17,"src":"3162:25:0","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$17_storage_ptr","typeString":"struct WeightedPoolImmutableData"}},"visibility":"internal"}],"src":"3161:39:0"},"scope":66,"src":"3099:102:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":67,"src":"2110:1093:0","usedErrors":[41,44],"usedEvents":[]}],"src":"46:3158:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[81]},"id":82,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":68,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":69,"nodeType":"StructuredDocumentation","src":"72:77:1","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":81,"linearizedBaseContracts":[81],"name":"IAuthentication","nameLocation":"159:15:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":70,"nodeType":"StructuredDocumentation","src":"181:67:1","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":72,"name":"SenderNotAllowed","nameLocation":"259:16:1","nodeType":"ErrorDefinition","parameters":{"id":71,"nodeType":"ParameterList","parameters":[],"src":"275:2:1"},"src":"253:25:1"},{"documentation":{"id":73,"nodeType":"StructuredDocumentation","src":"284:237:1","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":80,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:1","nodeType":"FunctionDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75,"mutability":"mutable","name":"selector","nameLocation":"554:8:1","nodeType":"VariableDeclaration","scope":80,"src":"547:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":74,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:1"},"returnParameters":{"id":79,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78,"mutability":"mutable","name":"actionId","nameLocation":"595:8:1","nodeType":"VariableDeclaration","scope":80,"src":"587:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":77,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:1"},"scope":81,"src":"526:79:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":82,"src":"149:458:1","usedErrors":[72],"usedEvents":[]}],"src":"46:562:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[91]},"id":92,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":83,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":84,"nodeType":"StructuredDocumentation","src":"72:56:2","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":91,"linearizedBaseContracts":[91],"name":"IRateProvider","nameLocation":"138:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"158:573:2","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":90,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:2","nodeType":"FunctionDefinition","parameters":{"id":86,"nodeType":"ParameterList","parameters":[],"src":"752:2:2"},"returnParameters":{"id":89,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"rate","nameLocation":"786:4:2","nodeType":"VariableDeclaration","scope":90,"src":"778:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:2"},"scope":91,"src":"736:56:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":92,"src":"128:666:2","usedErrors":[],"usedEvents":[]}],"src":"46:749:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","exportedSymbols":{"IVersion":[101]},"id":102,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":93,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":94,"nodeType":"StructuredDocumentation","src":"72:77:3","text":"@notice Simple interface to retrieve the version of a deployed contract."},"fullyImplemented":false,"id":101,"linearizedBaseContracts":[101],"name":"IVersion","nameLocation":"159:8:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":95,"nodeType":"StructuredDocumentation","src":"174:418:3","text":" @notice Return arbitrary text representing the version of a contract.\n @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n @return version The version string corresponding to the current deployed contract"},"functionSelector":"54fd4d50","id":100,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"606:7:3","nodeType":"FunctionDefinition","parameters":{"id":96,"nodeType":"ParameterList","parameters":[],"src":"613:2:3"},"returnParameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":100,"src":"639:13:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":97,"name":"string","nodeType":"ElementaryTypeName","src":"639:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"638:15:3"},"scope":101,"src":"597:57:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":102,"src":"149:507:3","usedErrors":[],"usedEvents":[]}],"src":"46:611:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[110],"IBalancerContractRegistry":[279]},"id":280,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":103,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"canonicalName":"ContractType","documentation":{"id":104,"nodeType":"StructuredDocumentation","src":"72:61:4","text":"@notice Registered contracts must be one of these types."},"id":110,"members":[{"id":105,"name":"OTHER","nameLocation":"157:5:4","nodeType":"EnumValue","src":"157:5:4"},{"id":106,"name":"POOL_FACTORY","nameLocation":"255:12:4","nodeType":"EnumValue","src":"255:12:4"},{"id":107,"name":"ROUTER","nameLocation":"273:6:4","nodeType":"EnumValue","src":"273:6:4"},{"id":108,"name":"HOOK","nameLocation":"285:4:4","nodeType":"EnumValue","src":"285:4:4"},{"id":109,"name":"ERC4626","nameLocation":"295:7:4","nodeType":"EnumValue","src":"295:7:4"}],"name":"ContractType","nameLocation":"138:12:4","nodeType":"EnumDefinition","src":"133:171:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":279,"linearizedBaseContracts":[279],"name":"IBalancerContractRegistry","nameLocation":"316:25:4","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":111,"nodeType":"StructuredDocumentation","src":"348:887:4","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":119,"members":[{"constant":false,"id":114,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:4","nodeType":"VariableDeclaration","scope":119,"src":"1270:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":113,"nodeType":"UserDefinedTypeName","pathNode":{"id":112,"name":"ContractType","nameLocations":["1270:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"1270:12:4"},"referencedDeclaration":110,"src":"1270:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":116,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:4","nodeType":"VariableDeclaration","scope":119,"src":"1305:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":115,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":118,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:4","nodeType":"VariableDeclaration","scope":119,"src":"1332:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":117,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:4","nodeType":"StructDefinition","scope":279,"src":"1240:112:4","visibility":"public"},{"anonymous":false,"documentation":{"id":120,"nodeType":"StructuredDocumentation","src":"1358:278:4","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":129,"name":"BalancerContractRegistered","nameLocation":"1647:26:4","nodeType":"EventDefinition","parameters":{"id":128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":123,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:4","nodeType":"VariableDeclaration","scope":129,"src":"1683:33:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":122,"nodeType":"UserDefinedTypeName","pathNode":{"id":121,"name":"ContractType","nameLocations":["1683:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"1683:12:4"},"referencedDeclaration":110,"src":"1683:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":125,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:4","nodeType":"VariableDeclaration","scope":129,"src":"1726:27:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":124,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":127,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:4","nodeType":"VariableDeclaration","scope":129,"src":"1763:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":126,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:4"},"src":"1641:160:4"},{"anonymous":false,"documentation":{"id":130,"nodeType":"StructuredDocumentation","src":"1807:296:4","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":139,"name":"BalancerContractDeregistered","nameLocation":"2114:28:4","nodeType":"EventDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:4","nodeType":"VariableDeclaration","scope":139,"src":"2152:33:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":132,"nodeType":"UserDefinedTypeName","pathNode":{"id":131,"name":"ContractType","nameLocations":["2152:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"2152:12:4"},"referencedDeclaration":110,"src":"2152:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":135,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:4","nodeType":"VariableDeclaration","scope":139,"src":"2195:27:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":137,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:4","nodeType":"VariableDeclaration","scope":139,"src":"2232:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":136,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:4"},"src":"2108:162:4"},{"anonymous":false,"documentation":{"id":140,"nodeType":"StructuredDocumentation","src":"2276:203:4","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":144,"name":"BalancerContractDeprecated","nameLocation":"2490:26:4","nodeType":"EventDefinition","parameters":{"id":143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":142,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:4","nodeType":"VariableDeclaration","scope":144,"src":"2517:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":141,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:4"},"src":"2484:66:4"},{"anonymous":false,"documentation":{"id":145,"nodeType":"StructuredDocumentation","src":"2556:187:4","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":151,"name":"ContractAliasUpdated","nameLocation":"2754:20:4","nodeType":"EventDefinition","parameters":{"id":150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":147,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:4","nodeType":"VariableDeclaration","scope":151,"src":"2775:28:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":146,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":149,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:4","nodeType":"VariableDeclaration","scope":151,"src":"2805:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":148,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:4"},"src":"2748:90:4"},{"documentation":{"id":152,"nodeType":"StructuredDocumentation","src":"2844:531:4","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":159,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:4","nodeType":"ErrorDefinition","parameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:4","nodeType":"VariableDeclaration","scope":159,"src":"3419:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":154,"nodeType":"UserDefinedTypeName","pathNode":{"id":153,"name":"ContractType","nameLocations":["3419:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"3419:12:4"},"referencedDeclaration":110,"src":"3419:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":157,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:4","nodeType":"VariableDeclaration","scope":159,"src":"3446:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":156,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:4"},"src":"3380:91:4"},{"documentation":{"id":160,"nodeType":"StructuredDocumentation","src":"3477:439:4","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":167,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:4","nodeType":"ErrorDefinition","parameters":{"id":166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":163,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:4","nodeType":"VariableDeclaration","scope":167,"src":"3957:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":162,"nodeType":"UserDefinedTypeName","pathNode":{"id":161,"name":"ContractType","nameLocations":["3957:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"3957:12:4"},"referencedDeclaration":110,"src":"3957:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":165,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:4","nodeType":"VariableDeclaration","scope":167,"src":"3984:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":164,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:4"},"src":"3921:84:4"},{"documentation":{"id":168,"nodeType":"StructuredDocumentation","src":"4011:338:4","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":174,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:4","nodeType":"ErrorDefinition","parameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":170,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:4","nodeType":"VariableDeclaration","scope":174,"src":"4385:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":169,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:4","nodeType":"VariableDeclaration","scope":174,"src":"4406:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":171,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:4"},"src":"4354:77:4"},{"documentation":{"id":175,"nodeType":"StructuredDocumentation","src":"4437:371:4","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":182,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:4","nodeType":"ErrorDefinition","parameters":{"id":181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":178,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:4","nodeType":"VariableDeclaration","scope":182,"src":"4844:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":177,"nodeType":"UserDefinedTypeName","pathNode":{"id":176,"name":"ContractType","nameLocations":["4844:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"4844:12:4"},"referencedDeclaration":110,"src":"4844:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":180,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:4","nodeType":"VariableDeclaration","scope":182,"src":"4871:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":179,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:4"},"src":"4813:79:4"},{"documentation":{"id":183,"nodeType":"StructuredDocumentation","src":"4898:175:4","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":187,"name":"ContractNameNotRegistered","nameLocation":"5084:25:4","nodeType":"ErrorDefinition","parameters":{"id":186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":185,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:4","nodeType":"VariableDeclaration","scope":187,"src":"5110:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":184,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:4"},"src":"5078:53:4"},{"documentation":{"id":188,"nodeType":"StructuredDocumentation","src":"5137:329:4","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":192,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:4","nodeType":"ErrorDefinition","parameters":{"id":191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:4","nodeType":"VariableDeclaration","scope":192,"src":"5506:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:4"},"src":"5471:60:4"},{"documentation":{"id":193,"nodeType":"StructuredDocumentation","src":"5537:145:4","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":197,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:4","nodeType":"ErrorDefinition","parameters":{"id":196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":195,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:4","nodeType":"VariableDeclaration","scope":197,"src":"5719:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":194,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:4"},"src":"5687:57:4"},{"documentation":{"id":198,"nodeType":"StructuredDocumentation","src":"5750:95:4","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":200,"name":"ZeroContractAddress","nameLocation":"5856:19:4","nodeType":"ErrorDefinition","parameters":{"id":199,"nodeType":"ParameterList","parameters":[],"src":"5875:2:4"},"src":"5850:28:4"},{"documentation":{"id":201,"nodeType":"StructuredDocumentation","src":"5884:86:4","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":203,"name":"InvalidContractName","nameLocation":"5981:19:4","nodeType":"ErrorDefinition","parameters":{"id":202,"nodeType":"ParameterList","parameters":[],"src":"6000:2:4"},"src":"5975:28:4"},{"documentation":{"id":204,"nodeType":"StructuredDocumentation","src":"6009:51:4","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":206,"name":"InvalidContractAlias","nameLocation":"6071:20:4","nodeType":"ErrorDefinition","parameters":{"id":205,"nodeType":"ParameterList","parameters":[],"src":"6091:2:4"},"src":"6065:29:4"},{"documentation":{"id":207,"nodeType":"StructuredDocumentation","src":"6100:711:4","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":217,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:4","nodeType":"FunctionDefinition","parameters":{"id":215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":210,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:4","nodeType":"VariableDeclaration","scope":217,"src":"6859:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":209,"nodeType":"UserDefinedTypeName","pathNode":{"id":208,"name":"ContractType","nameLocations":["6859:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"6859:12:4"},"referencedDeclaration":110,"src":"6859:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":212,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:4","nodeType":"VariableDeclaration","scope":217,"src":"6894:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":211,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":214,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:4","nodeType":"VariableDeclaration","scope":217,"src":"6930:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":213,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:4"},"returnParameters":{"id":216,"nodeType":"ParameterList","parameters":[],"src":"6968:0:4"},"scope":279,"src":"6816:153:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":218,"nodeType":"StructuredDocumentation","src":"6975:878:4","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":223,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:4","nodeType":"FunctionDefinition","parameters":{"id":221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":220,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:4","nodeType":"VariableDeclaration","scope":223,"src":"7894:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":219,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:4"},"returnParameters":{"id":222,"nodeType":"ParameterList","parameters":[],"src":"7930:0:4"},"scope":279,"src":"7858:73:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":224,"nodeType":"StructuredDocumentation","src":"7937:472:4","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":229,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:4","nodeType":"FunctionDefinition","parameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":226,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:4","nodeType":"VariableDeclaration","scope":229,"src":"8449:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":225,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:4"},"returnParameters":{"id":228,"nodeType":"ParameterList","parameters":[],"src":"8482:0:4"},"scope":279,"src":"8414:69:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":230,"nodeType":"StructuredDocumentation","src":"8489:650:4","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":237,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:4","nodeType":"FunctionDefinition","parameters":{"id":235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:4","nodeType":"VariableDeclaration","scope":237,"src":"9186:27:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":231,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":234,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:4","nodeType":"VariableDeclaration","scope":237,"src":"9215:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":233,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:4"},"returnParameters":{"id":236,"nodeType":"ParameterList","parameters":[],"src":"9249:0:4"},"scope":279,"src":"9144:106:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"9256:316:4","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":248,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:4","nodeType":"FunctionDefinition","parameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":241,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:4","nodeType":"VariableDeclaration","scope":248,"src":"9620:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":240,"nodeType":"UserDefinedTypeName","pathNode":{"id":239,"name":"ContractType","nameLocations":["9620:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"9620:12:4"},"referencedDeclaration":110,"src":"9620:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:4","nodeType":"VariableDeclaration","scope":248,"src":"9655:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":242,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:4"},"returnParameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":246,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:4","nodeType":"VariableDeclaration","scope":248,"src":"9708:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":245,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:4"},"scope":279,"src":"9577:146:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":249,"nodeType":"StructuredDocumentation","src":"9729:496:4","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":261,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:4","nodeType":"FunctionDefinition","parameters":{"id":255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:4","nodeType":"VariableDeclaration","scope":261,"src":"10268:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":251,"nodeType":"UserDefinedTypeName","pathNode":{"id":250,"name":"ContractType","nameLocations":["10268:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"10268:12:4"},"referencedDeclaration":110,"src":"10268:12:4","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":254,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:4","nodeType":"VariableDeclaration","scope":261,"src":"10303:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":253,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:4"},"returnParameters":{"id":260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:4","nodeType":"VariableDeclaration","scope":261,"src":"10359:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":256,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":259,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:4","nodeType":"VariableDeclaration","scope":261,"src":"10384:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":258,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:4"},"scope":279,"src":"10230:169:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":262,"nodeType":"StructuredDocumentation","src":"10405:233:4","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":270,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:4","nodeType":"FunctionDefinition","parameters":{"id":265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":264,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:4","nodeType":"VariableDeclaration","scope":270,"src":"10676:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":263,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:4"},"returnParameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":268,"mutability":"mutable","name":"info","nameLocation":"10744:4:4","nodeType":"VariableDeclaration","scope":270,"src":"10724:24:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":267,"nodeType":"UserDefinedTypeName","pathNode":{"id":266,"name":"ContractInfo","nameLocations":["10724:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"10724:12:4"},"referencedDeclaration":119,"src":"10724:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:4"},"scope":279,"src":"10643:107:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":271,"nodeType":"StructuredDocumentation","src":"10756:92:4","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":278,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:4","nodeType":"FunctionDefinition","parameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":273,"mutability":"mutable","name":"router","nameLocation":"10886:6:4","nodeType":"VariableDeclaration","scope":278,"src":"10878:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":272,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:4"},"returnParameters":{"id":277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":276,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":278,"src":"10917:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":275,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:4"},"scope":279,"src":"10853:70:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":280,"src":"306:10619:4","usedErrors":[159,167,174,182,187,192,197,200,203,206],"usedEvents":[129,139,144,151]}],"src":"46:10880:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","exportedSymbols":{"IComposableCow":[329],"ICowConditionalOrder":[421]},"id":330,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":281,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":283,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":330,"sourceUnit":422,"src":"72:66:5","symbolAliases":[{"foreign":{"id":282,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"81:20:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IComposableCow","contractDependencies":[],"contractKind":"interface","documentation":{"id":284,"nodeType":"StructuredDocumentation","src":"140:80:5","text":"@notice Utility contract used to validate orders in the `CowSwapFeeBurner`."},"fullyImplemented":false,"id":329,"linearizedBaseContracts":[329],"name":"IComposableCow","nameLocation":"230:14:5","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IComposableCow.Payload","documentation":{"id":285,"nodeType":"StructuredDocumentation","src":"251:388:5","text":" @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n @param proof Merkle Tree proof\n @param params Conditional order params\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused"},"id":294,"members":[{"constant":false,"id":288,"mutability":"mutable","name":"proof","nameLocation":"679:5:5","nodeType":"VariableDeclaration","scope":294,"src":"669:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":286,"name":"bytes32","nodeType":"ElementaryTypeName","src":"669:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":287,"nodeType":"ArrayTypeName","src":"669:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":291,"mutability":"mutable","name":"params","nameLocation":"738:6:5","nodeType":"VariableDeclaration","scope":294,"src":"694:50:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":290,"nodeType":"UserDefinedTypeName","pathNode":{"id":289,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["694:20:5","715:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":370,"src":"694:43:5"},"referencedDeclaration":370,"src":"694:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":293,"mutability":"mutable","name":"offchainInput","nameLocation":"760:13:5","nodeType":"VariableDeclaration","scope":294,"src":"754:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":292,"name":"bytes","nodeType":"ElementaryTypeName","src":"754:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"Payload","nameLocation":"651:7:5","nodeType":"StructDefinition","scope":329,"src":"644:136:5","visibility":"public"},{"documentation":{"id":295,"nodeType":"StructuredDocumentation","src":"786:171:5","text":" @notice Construct a CoW order.\n @param params Order parameters\n @param dispatch If true, submit the order (always true in the CowSwapBurner)"},"functionSelector":"6bfae1ca","id":303,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"971:6:5","nodeType":"FunctionDefinition","parameters":{"id":301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":298,"mutability":"mutable","name":"params","nameLocation":"1031:6:5","nodeType":"VariableDeclaration","scope":303,"src":"978:59:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_calldata_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":297,"nodeType":"UserDefinedTypeName","pathNode":{"id":296,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["978:20:5","999:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":370,"src":"978:43:5"},"referencedDeclaration":370,"src":"978:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":300,"mutability":"mutable","name":"dispatch","nameLocation":"1044:8:5","nodeType":"VariableDeclaration","scope":303,"src":"1039:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":299,"name":"bool","nodeType":"ElementaryTypeName","src":"1039:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"977:76:5"},"returnParameters":{"id":302,"nodeType":"ParameterList","parameters":[],"src":"1062:0:5"},"scope":329,"src":"962:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"f698da25","id":308,"implemented":false,"kind":"function","modifiers":[],"name":"domainSeparator","nameLocation":"1078:15:5","nodeType":"FunctionDefinition","parameters":{"id":304,"nodeType":"ParameterList","parameters":[],"src":"1093:2:5"},"returnParameters":{"id":307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":308,"src":"1119:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":305,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1119:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1118:9:5"},"scope":329,"src":"1069:59:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":309,"nodeType":"StructuredDocumentation","src":"1134:77:5","text":"@notice Delegated ERC-1271 signature validation with an enhanced context."},"functionSelector":"53f00b14","id":328,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSafeSignature","nameLocation":"1225:20:5","nodeType":"FunctionDefinition","parameters":{"id":324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":311,"mutability":"mutable","name":"safe","nameLocation":"1263:4:5","nodeType":"VariableDeclaration","scope":328,"src":"1255:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":310,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":313,"mutability":"mutable","name":"sender","nameLocation":"1285:6:5","nodeType":"VariableDeclaration","scope":328,"src":"1277:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":312,"name":"address","nodeType":"ElementaryTypeName","src":"1277:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":315,"mutability":"mutable","name":"_hash","nameLocation":"1309:5:5","nodeType":"VariableDeclaration","scope":328,"src":"1301:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1301:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":317,"mutability":"mutable","name":"_domainSeparator","nameLocation":"1332:16:5","nodeType":"VariableDeclaration","scope":328,"src":"1324:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":316,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1324:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":319,"mutability":"mutable","name":"typeHash","nameLocation":"1366:8:5","nodeType":"VariableDeclaration","scope":328,"src":"1358:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":318,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1358:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":321,"mutability":"mutable","name":"encodeData","nameLocation":"1399:10:5","nodeType":"VariableDeclaration","scope":328,"src":"1384:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":320,"name":"bytes","nodeType":"ElementaryTypeName","src":"1384:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":323,"mutability":"mutable","name":"payload","nameLocation":"1434:7:5","nodeType":"VariableDeclaration","scope":328,"src":"1419:22:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":322,"name":"bytes","nodeType":"ElementaryTypeName","src":"1419:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1245:202:5"},"returnParameters":{"id":327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":328,"src":"1471:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":325,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1471:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1470:8:5"},"scope":329,"src":"1216:263:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":330,"src":"220:1261:5","usedErrors":[],"usedEvents":[]}],"src":"46:1436:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","exportedSymbols":{"GPv2Order":[360],"ICowConditionalOrder":[421],"IERC20":[9632]},"id":422,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":331,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":422,"sourceUnit":9633,"src":"69:72:6","symbolAliases":[{"foreign":{"id":332,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"78:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"GPv2Order","id":360,"members":[{"constant":false,"id":336,"mutability":"mutable","name":"sellToken","nameLocation":"274:9:6","nodeType":"VariableDeclaration","scope":360,"src":"267:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["267:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"267:6:6"},"referencedDeclaration":9632,"src":"267:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":339,"mutability":"mutable","name":"buyToken","nameLocation":"296:8:6","nodeType":"VariableDeclaration","scope":360,"src":"289:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":338,"nodeType":"UserDefinedTypeName","pathNode":{"id":337,"name":"IERC20","nameLocations":["289:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"289:6:6"},"referencedDeclaration":9632,"src":"289:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":341,"mutability":"mutable","name":"receiver","nameLocation":"318:8:6","nodeType":"VariableDeclaration","scope":360,"src":"310:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":340,"name":"address","nodeType":"ElementaryTypeName","src":"310:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":343,"mutability":"mutable","name":"sellAmount","nameLocation":"340:10:6","nodeType":"VariableDeclaration","scope":360,"src":"332:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":342,"name":"uint256","nodeType":"ElementaryTypeName","src":"332:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":345,"mutability":"mutable","name":"buyAmount","nameLocation":"364:9:6","nodeType":"VariableDeclaration","scope":360,"src":"356:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":344,"name":"uint256","nodeType":"ElementaryTypeName","src":"356:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":347,"mutability":"mutable","name":"validTo","nameLocation":"386:7:6","nodeType":"VariableDeclaration","scope":360,"src":"379:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":346,"name":"uint32","nodeType":"ElementaryTypeName","src":"379:6:6","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":349,"mutability":"mutable","name":"appData","nameLocation":"407:7:6","nodeType":"VariableDeclaration","scope":360,"src":"399:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":348,"name":"bytes32","nodeType":"ElementaryTypeName","src":"399:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":351,"mutability":"mutable","name":"feeAmount","nameLocation":"428:9:6","nodeType":"VariableDeclaration","scope":360,"src":"420:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":350,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":353,"mutability":"mutable","name":"kind","nameLocation":"451:4:6","nodeType":"VariableDeclaration","scope":360,"src":"443:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":352,"name":"bytes32","nodeType":"ElementaryTypeName","src":"443:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":355,"mutability":"mutable","name":"partiallyFillable","nameLocation":"466:17:6","nodeType":"VariableDeclaration","scope":360,"src":"461:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":354,"name":"bool","nodeType":"ElementaryTypeName","src":"461:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":357,"mutability":"mutable","name":"sellTokenBalance","nameLocation":"497:16:6","nodeType":"VariableDeclaration","scope":360,"src":"489:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"489:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":359,"mutability":"mutable","name":"buyTokenBalance","nameLocation":"527:15:6","nodeType":"VariableDeclaration","scope":360,"src":"519:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":358,"name":"bytes32","nodeType":"ElementaryTypeName","src":"519:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"GPv2Order","nameLocation":"251:9:6","nodeType":"StructDefinition","scope":422,"src":"244:301:6","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"ICowConditionalOrder","contractDependencies":[],"contractKind":"interface","documentation":{"id":361,"nodeType":"StructuredDocumentation","src":"547:131:6","text":" @notice Conditional Order Interface - verify a Cow order.\n @author CoW Protocol Developers + mfw78 "},"fullyImplemented":false,"id":421,"linearizedBaseContracts":[421],"name":"ICowConditionalOrder","nameLocation":"689:20:6","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowConditionalOrder.ConditionalOrderParams","documentation":{"id":362,"nodeType":"StructuredDocumentation","src":"716:454:6","text":" @notice This struct is used to uniquely identify a conditional order for an owner.\n @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n @param handler The contract implementing the conditional order logic\n @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n @param staticData Data available to ALL discrete orders created by the conditional order"},"id":370,"members":[{"constant":false,"id":365,"mutability":"mutable","name":"handler","nameLocation":"1236:7:6","nodeType":"VariableDeclaration","scope":370,"src":"1215:28:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$421","typeString":"contract ICowConditionalOrder"},"typeName":{"id":364,"nodeType":"UserDefinedTypeName","pathNode":{"id":363,"name":"ICowConditionalOrder","nameLocations":["1215:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":421,"src":"1215:20:6"},"referencedDeclaration":421,"src":"1215:20:6","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$421","typeString":"contract ICowConditionalOrder"}},"visibility":"internal"},{"constant":false,"id":367,"mutability":"mutable","name":"salt","nameLocation":"1261:4:6","nodeType":"VariableDeclaration","scope":370,"src":"1253:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":366,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1253:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":369,"mutability":"mutable","name":"staticData","nameLocation":"1281:10:6","nodeType":"VariableDeclaration","scope":370,"src":"1275:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":368,"name":"bytes","nodeType":"ElementaryTypeName","src":"1275:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ConditionalOrderParams","nameLocation":"1182:22:6","nodeType":"StructDefinition","scope":421,"src":"1175:123:6","visibility":"public"},{"documentation":{"id":371,"nodeType":"StructuredDocumentation","src":"1304:191:6","text":" @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"c8fc2725","id":375,"name":"OrderNotValid","nameLocation":"1506:13:6","nodeType":"ErrorDefinition","parameters":{"id":374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":373,"mutability":"mutable","name":"reason","nameLocation":"1527:6:6","nodeType":"VariableDeclaration","scope":375,"src":"1520:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":372,"name":"string","nodeType":"ElementaryTypeName","src":"1520:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1519:15:6"},"src":"1500:35:6"},{"documentation":{"id":376,"nodeType":"StructuredDocumentation","src":"1619:144:6","text":" @notice Polling should be retried at the next block.\n @param reason Text description of the reason it should be retried"},"errorSelector":"d05f3065","id":380,"name":"PollTryNextBlock","nameLocation":"1774:16:6","nodeType":"ErrorDefinition","parameters":{"id":379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":378,"mutability":"mutable","name":"reason","nameLocation":"1798:6:6","nodeType":"VariableDeclaration","scope":380,"src":"1791:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":377,"name":"string","nodeType":"ElementaryTypeName","src":"1791:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1790:15:6"},"src":"1768:38:6"},{"documentation":{"id":381,"nodeType":"StructuredDocumentation","src":"1812:223:6","text":" @notice Polling should be retried at a specific block number.\n @param blockNumber The block number when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"1fe8506e","id":387,"name":"PollTryAtBlock","nameLocation":"2046:14:6","nodeType":"ErrorDefinition","parameters":{"id":386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":383,"mutability":"mutable","name":"blockNumber","nameLocation":"2069:11:6","nodeType":"VariableDeclaration","scope":387,"src":"2061:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":382,"name":"uint256","nodeType":"ElementaryTypeName","src":"2061:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":385,"mutability":"mutable","name":"reason","nameLocation":"2089:6:6","nodeType":"VariableDeclaration","scope":387,"src":"2082:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":384,"name":"string","nodeType":"ElementaryTypeName","src":"2082:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2060:36:6"},"src":"2040:57:6"},{"documentation":{"id":388,"nodeType":"StructuredDocumentation","src":"2103:233:6","text":" @notice Polling should be retried at a specific epoch (unix timestamp).\n @param timestamp The unix timestamp when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"7e334637","id":394,"name":"PollTryAtEpoch","nameLocation":"2347:14:6","nodeType":"ErrorDefinition","parameters":{"id":393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":390,"mutability":"mutable","name":"timestamp","nameLocation":"2370:9:6","nodeType":"VariableDeclaration","scope":394,"src":"2362:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":389,"name":"uint256","nodeType":"ElementaryTypeName","src":"2362:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":392,"mutability":"mutable","name":"reason","nameLocation":"2388:6:6","nodeType":"VariableDeclaration","scope":394,"src":"2381:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":391,"name":"string","nodeType":"ElementaryTypeName","src":"2381:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2361:34:6"},"src":"2341:55:6"},{"documentation":{"id":395,"nodeType":"StructuredDocumentation","src":"2402:165:6","text":" @notice The conditional order should not be polled again (i.e., deleted).\n @param reason Text description of the reason it should be deleted"},"errorSelector":"981b64cd","id":399,"name":"PollNever","nameLocation":"2578:9:6","nodeType":"ErrorDefinition","parameters":{"id":398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":397,"mutability":"mutable","name":"reason","nameLocation":"2595:6:6","nodeType":"VariableDeclaration","scope":399,"src":"2588:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":396,"name":"string","nodeType":"ElementaryTypeName","src":"2588:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:15:6"},"src":"2572:31:6"},{"documentation":{"id":400,"nodeType":"StructuredDocumentation","src":"2609:1295:6","text":" @notice Verify that a given discrete order is valid.\n @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` calling `isValidSignature`\n @param _hash `EIP712` order digest\n @param domainSeparator `EIP712` domain separator\n @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n @param order The proposed discrete order's `GPv2Order` data struct"},"functionSelector":"14a2a784","id":420,"implemented":false,"kind":"function","modifiers":[],"name":"verify","nameLocation":"3918:6:6","nodeType":"FunctionDefinition","parameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":402,"mutability":"mutable","name":"owner","nameLocation":"3942:5:6","nodeType":"VariableDeclaration","scope":420,"src":"3934:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":401,"name":"address","nodeType":"ElementaryTypeName","src":"3934:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":404,"mutability":"mutable","name":"sender","nameLocation":"3965:6:6","nodeType":"VariableDeclaration","scope":420,"src":"3957:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":403,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":406,"mutability":"mutable","name":"_hash","nameLocation":"3989:5:6","nodeType":"VariableDeclaration","scope":420,"src":"3981:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":405,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3981:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":408,"mutability":"mutable","name":"domainSeparator","nameLocation":"4012:15:6","nodeType":"VariableDeclaration","scope":420,"src":"4004:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4004:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":410,"mutability":"mutable","name":"ctx","nameLocation":"4045:3:6","nodeType":"VariableDeclaration","scope":420,"src":"4037:11:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":409,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4037:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":412,"mutability":"mutable","name":"staticInput","nameLocation":"4073:11:6","nodeType":"VariableDeclaration","scope":420,"src":"4058:26:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":411,"name":"bytes","nodeType":"ElementaryTypeName","src":"4058:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":414,"mutability":"mutable","name":"offchainInput","nameLocation":"4109:13:6","nodeType":"VariableDeclaration","scope":420,"src":"4094:28:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":413,"name":"bytes","nodeType":"ElementaryTypeName","src":"4094:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":417,"mutability":"mutable","name":"order","nameLocation":"4151:5:6","nodeType":"VariableDeclaration","scope":420,"src":"4132:24:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":416,"nodeType":"UserDefinedTypeName","pathNode":{"id":415,"name":"GPv2Order","nameLocations":["4132:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"4132:9:6"},"referencedDeclaration":360,"src":"4132:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3924:238:6"},"returnParameters":{"id":419,"nodeType":"ParameterList","parameters":[],"src":"4176:0:6"},"scope":421,"src":"3909:268:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":422,"src":"679:3500:6","usedErrors":[375,380,387,394,399],"usedEvents":[]}],"src":"36:4144:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","exportedSymbols":{"GPv2Order":[360],"ICowConditionalOrder":[421],"ICowConditionalOrderGenerator":[457],"IERC165":[10271]},"id":458,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":423,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:7"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":425,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":458,"sourceUnit":10272,"src":"69:82:7","symbolAliases":[{"foreign":{"id":424,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"78:7:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":458,"sourceUnit":422,"src":"153:77:7","symbolAliases":[{"foreign":{"id":426,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"162:20:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":427,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":360,"src":"184:9:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":430,"name":"IERC165","nameLocations":["369:7:7"],"nodeType":"IdentifierPath","referencedDeclaration":10271,"src":"369:7:7"},"id":431,"nodeType":"InheritanceSpecifier","src":"369:7:7"}],"canonicalName":"ICowConditionalOrderGenerator","contractDependencies":[],"contractKind":"interface","documentation":{"id":429,"nodeType":"StructuredDocumentation","src":"232:93:7","text":" @notice Conditional Order Generator Interface\n @author mfw78 "},"fullyImplemented":false,"id":457,"linearizedBaseContracts":[457,10271],"name":"ICowConditionalOrderGenerator","nameLocation":"336:29:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":432,"nodeType":"StructuredDocumentation","src":"383:187:7","text":" @dev Emitted when a new conditional order is created.\n @param owner The address that created the conditional order\n @param params The conditional order data"},"eventSelector":"2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361","id":439,"name":"ConditionalOrderCreated","nameLocation":"581:23:7","nodeType":"EventDefinition","parameters":{"id":438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":434,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"621:5:7","nodeType":"VariableDeclaration","scope":439,"src":"605:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":433,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":437,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"672:6:7","nodeType":"VariableDeclaration","scope":439,"src":"628:50:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":436,"nodeType":"UserDefinedTypeName","pathNode":{"id":435,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["628:20:7","649:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":370,"src":"628:43:7"},"referencedDeclaration":370,"src":"628:43:7","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"}],"src":"604:75:7"},"src":"575:105:7"},{"documentation":{"id":440,"nodeType":"StructuredDocumentation","src":"686:721:7","text":" @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n @dev **MUST** revert if the order conditions are not met.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` of the parent `isValidSignature` call\n @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n @return order Tradeable order for submission to the CoW Protocol API"},"functionSelector":"b8296fc4","id":456,"implemented":false,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"1421:17:7","nodeType":"FunctionDefinition","parameters":{"id":451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":442,"mutability":"mutable","name":"owner","nameLocation":"1456:5:7","nodeType":"VariableDeclaration","scope":456,"src":"1448:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":441,"name":"address","nodeType":"ElementaryTypeName","src":"1448:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":444,"mutability":"mutable","name":"sender","nameLocation":"1479:6:7","nodeType":"VariableDeclaration","scope":456,"src":"1471:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":443,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":446,"mutability":"mutable","name":"ctx","nameLocation":"1503:3:7","nodeType":"VariableDeclaration","scope":456,"src":"1495:11:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1495:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":448,"mutability":"mutable","name":"staticInput","nameLocation":"1531:11:7","nodeType":"VariableDeclaration","scope":456,"src":"1516:26:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":447,"name":"bytes","nodeType":"ElementaryTypeName","src":"1516:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":450,"mutability":"mutable","name":"offchainInput","nameLocation":"1567:13:7","nodeType":"VariableDeclaration","scope":456,"src":"1552:28:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":449,"name":"bytes","nodeType":"ElementaryTypeName","src":"1552:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1438:148:7"},"returnParameters":{"id":455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":456,"src":"1610:16:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":453,"nodeType":"UserDefinedTypeName","pathNode":{"id":452,"name":"GPv2Order","nameLocations":["1610:9:7"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"1610:9:7"},"referencedDeclaration":360,"src":"1610:9:7","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"1609:18:7"},"scope":457,"src":"1412:216:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":458,"src":"326:1304:7","usedErrors":[],"usedEvents":[439]}],"src":"36:1595:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","exportedSymbols":{"GPv2Order":[360],"ICowConditionalOrder":[421],"ICowConditionalOrderGenerator":[457],"ICowSwapFeeBurner":[569],"IERC1271":[8732],"IERC20":[9632],"IProtocolFeeBurner":[718]},"id":570,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":459,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":461,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":570,"sourceUnit":8733,"src":"72:75:8","symbolAliases":[{"foreign":{"id":460,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":463,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":570,"sourceUnit":9633,"src":"148:72:8","symbolAliases":[{"foreign":{"id":462,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"./ICowConditionalOrderGenerator.sol","id":465,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":570,"sourceUnit":458,"src":"222:84:8","symbolAliases":[{"foreign":{"id":464,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":457,"src":"231:29:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":468,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":570,"sourceUnit":422,"src":"307:77:8","symbolAliases":[{"foreign":{"id":466,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"316:20:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":467,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":360,"src":"338:9:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":470,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":570,"sourceUnit":719,"src":"385:62:8","symbolAliases":[{"foreign":{"id":469,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"394:18:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":471,"name":"IERC1271","nameLocations":["480:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":8732,"src":"480:8:8"},"id":472,"nodeType":"InheritanceSpecifier","src":"480:8:8"},{"baseName":{"id":473,"name":"IProtocolFeeBurner","nameLocations":["490:18:8"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"490:18:8"},"id":474,"nodeType":"InheritanceSpecifier","src":"490:18:8"},{"baseName":{"id":475,"name":"ICowConditionalOrder","nameLocations":["510:20:8"],"nodeType":"IdentifierPath","referencedDeclaration":421,"src":"510:20:8"},"id":476,"nodeType":"InheritanceSpecifier","src":"510:20:8"},{"baseName":{"id":477,"name":"ICowConditionalOrderGenerator","nameLocations":["532:29:8"],"nodeType":"IdentifierPath","referencedDeclaration":457,"src":"532:29:8"},"id":478,"nodeType":"InheritanceSpecifier","src":"532:29:8"}],"canonicalName":"ICowSwapFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":569,"linearizedBaseContracts":[569,457,10271,421,718,8732],"name":"ICowSwapFeeBurner","nameLocation":"459:17:8","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowSwapFeeBurner.OrderStatus","id":483,"members":[{"id":479,"name":"Nonexistent","nameLocation":"595:11:8","nodeType":"EnumValue","src":"595:11:8"},{"id":480,"name":"Active","nameLocation":"616:6:8","nodeType":"EnumValue","src":"616:6:8"},{"id":481,"name":"Filled","nameLocation":"632:6:8","nodeType":"EnumValue","src":"632:6:8"},{"id":482,"name":"Failed","nameLocation":"648:6:8","nodeType":"EnumValue","src":"648:6:8"}],"name":"OrderStatus","nameLocation":"573:11:8","nodeType":"EnumDefinition","src":"568:92:8"},{"anonymous":false,"documentation":{"id":484,"nodeType":"StructuredDocumentation","src":"666:322:8","text":" @notice An order was retried after failing.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param minAmountOut The minimum number of target tokens required\n @param deadline The deadline for the new order to be filled"},"eventSelector":"1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a","id":495,"name":"OrderRetried","nameLocation":"999:12:8","nodeType":"EventDefinition","parameters":{"id":494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":487,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1019:7:8","nodeType":"VariableDeclaration","scope":495,"src":"1012:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":486,"nodeType":"UserDefinedTypeName","pathNode":{"id":485,"name":"IERC20","nameLocations":["1012:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1012:6:8"},"referencedDeclaration":9632,"src":"1012:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":489,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1036:13:8","nodeType":"VariableDeclaration","scope":495,"src":"1028:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":488,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":491,"indexed":false,"mutability":"mutable","name":"minAmountOut","nameLocation":"1059:12:8","nodeType":"VariableDeclaration","scope":495,"src":"1051:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":490,"name":"uint256","nodeType":"ElementaryTypeName","src":"1051:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":493,"indexed":false,"mutability":"mutable","name":"deadline","nameLocation":"1081:8:8","nodeType":"VariableDeclaration","scope":495,"src":"1073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":492,"name":"uint256","nodeType":"ElementaryTypeName","src":"1073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1011:79:8"},"src":"993:98:8"},{"anonymous":false,"documentation":{"id":496,"nodeType":"StructuredDocumentation","src":"1097:268:8","text":" @notice An order was canceled after failure.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param receiver The account that received the tokens from the unfilled order"},"eventSelector":"0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a","id":505,"name":"OrderCanceled","nameLocation":"1376:13:8","nodeType":"EventDefinition","parameters":{"id":504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":499,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1397:7:8","nodeType":"VariableDeclaration","scope":505,"src":"1390:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":498,"nodeType":"UserDefinedTypeName","pathNode":{"id":497,"name":"IERC20","nameLocations":["1390:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1390:6:8"},"referencedDeclaration":9632,"src":"1390:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":501,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1414:13:8","nodeType":"VariableDeclaration","scope":505,"src":"1406:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":500,"name":"uint256","nodeType":"ElementaryTypeName","src":"1406:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":503,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"1437:8:8","nodeType":"VariableDeclaration","scope":505,"src":"1429:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":502,"name":"address","nodeType":"ElementaryTypeName","src":"1429:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1389:57:8"},"src":"1370:77:8"},{"documentation":{"id":506,"nodeType":"StructuredDocumentation","src":"1453:130:8","text":" @notice The order parameters were invalid.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"8d8a6110","id":510,"name":"InvalidOrderParameters","nameLocation":"1594:22:8","nodeType":"ErrorDefinition","parameters":{"id":509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":508,"mutability":"mutable","name":"reason","nameLocation":"1624:6:8","nodeType":"VariableDeclaration","scope":510,"src":"1617:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":507,"name":"string","nodeType":"ElementaryTypeName","src":"1617:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1616:15:8"},"src":"1588:44:8"},{"documentation":{"id":511,"nodeType":"StructuredDocumentation","src":"1638:237:8","text":" @notice Attempt to revert an order that had not failed.\n @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n @param actualStatus The status of the order when `revertOrder` was called"},"errorSelector":"d0c1b3cf","id":516,"name":"OrderHasUnexpectedStatus","nameLocation":"1886:24:8","nodeType":"ErrorDefinition","parameters":{"id":515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":514,"mutability":"mutable","name":"actualStatus","nameLocation":"1923:12:8","nodeType":"VariableDeclaration","scope":516,"src":"1911:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":513,"nodeType":"UserDefinedTypeName","pathNode":{"id":512,"name":"OrderStatus","nameLocations":["1911:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"1911:11:8"},"referencedDeclaration":483,"src":"1911:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"1910:26:8"},"src":"1880:57:8"},{"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"1943:91:8","text":"@notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow."},"errorSelector":"32798566","id":519,"name":"InterfaceIsSignatureVerifierMuxer","nameLocation":"2045:33:8","nodeType":"ErrorDefinition","parameters":{"id":518,"nodeType":"ParameterList","parameters":[],"src":"2078:2:8"},"src":"2039:42:8"},{"documentation":{"id":520,"nodeType":"StructuredDocumentation","src":"2087:178:8","text":" @notice Get the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderData The order data for the given token"},"functionSelector":"6eba2b13","id":529,"implemented":false,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"2279:8:8","nodeType":"FunctionDefinition","parameters":{"id":524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":523,"mutability":"mutable","name":"tokenIn","nameLocation":"2295:7:8","nodeType":"VariableDeclaration","scope":529,"src":"2288:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":522,"nodeType":"UserDefinedTypeName","pathNode":{"id":521,"name":"IERC20","nameLocations":["2288:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2288:6:8"},"referencedDeclaration":9632,"src":"2288:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2287:16:8"},"returnParameters":{"id":528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":527,"mutability":"mutable","name":"orderData","nameLocation":"2344:9:8","nodeType":"VariableDeclaration","scope":529,"src":"2327:26:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":526,"nodeType":"UserDefinedTypeName","pathNode":{"id":525,"name":"GPv2Order","nameLocations":["2327:9:8"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"2327:9:8"},"referencedDeclaration":360,"src":"2327:9:8","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"2326:28:8"},"scope":569,"src":"2270:85:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":530,"nodeType":"StructuredDocumentation","src":"2361:203:8","text":" @notice Get the status of the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderStatus The status of the order for the given token"},"functionSelector":"6f9d75cd","id":539,"implemented":false,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"2578:14:8","nodeType":"FunctionDefinition","parameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":533,"mutability":"mutable","name":"tokenIn","nameLocation":"2600:7:8","nodeType":"VariableDeclaration","scope":539,"src":"2593:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":532,"nodeType":"UserDefinedTypeName","pathNode":{"id":531,"name":"IERC20","nameLocations":["2593:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2593:6:8"},"referencedDeclaration":9632,"src":"2593:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2592:16:8"},"returnParameters":{"id":538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":537,"mutability":"mutable","name":"orderStatus","nameLocation":"2644:11:8","nodeType":"VariableDeclaration","scope":539,"src":"2632:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":536,"nodeType":"UserDefinedTypeName","pathNode":{"id":535,"name":"OrderStatus","nameLocations":["2632:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"2632:11:8"},"referencedDeclaration":483,"src":"2632:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"2631:25:8"},"scope":569,"src":"2569:88:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":540,"nodeType":"StructuredDocumentation","src":"2663:291:8","text":" @notice Retry an order that has not been filled yet and expired.\n @param tokenIn The token used to identify the order\n @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n @param deadline The deadline for the order to be filled."},"functionSelector":"d83b06a4","id":550,"implemented":false,"kind":"function","modifiers":[],"name":"retryOrder","nameLocation":"2968:10:8","nodeType":"FunctionDefinition","parameters":{"id":548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":543,"mutability":"mutable","name":"tokenIn","nameLocation":"2986:7:8","nodeType":"VariableDeclaration","scope":550,"src":"2979:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":542,"nodeType":"UserDefinedTypeName","pathNode":{"id":541,"name":"IERC20","nameLocations":["2979:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2979:6:8"},"referencedDeclaration":9632,"src":"2979:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":545,"mutability":"mutable","name":"minAmountOut","nameLocation":"3003:12:8","nodeType":"VariableDeclaration","scope":550,"src":"2995:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":544,"name":"uint256","nodeType":"ElementaryTypeName","src":"2995:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":547,"mutability":"mutable","name":"deadline","nameLocation":"3025:8:8","nodeType":"VariableDeclaration","scope":550,"src":"3017:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":546,"name":"uint256","nodeType":"ElementaryTypeName","src":"3017:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2978:56:8"},"returnParameters":{"id":549,"nodeType":"ParameterList","parameters":[],"src":"3043:0:8"},"scope":569,"src":"2959:85:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":551,"nodeType":"StructuredDocumentation","src":"3050:274:8","text":" @notice Return tokens from an order that has failed.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the tokens from the unfilled order"},"functionSelector":"60e092c6","id":559,"implemented":false,"kind":"function","modifiers":[],"name":"cancelOrder","nameLocation":"3338:11:8","nodeType":"FunctionDefinition","parameters":{"id":557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":554,"mutability":"mutable","name":"tokenIn","nameLocation":"3357:7:8","nodeType":"VariableDeclaration","scope":559,"src":"3350:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":553,"nodeType":"UserDefinedTypeName","pathNode":{"id":552,"name":"IERC20","nameLocations":["3350:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3350:6:8"},"referencedDeclaration":9632,"src":"3350:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":556,"mutability":"mutable","name":"receiver","nameLocation":"3374:8:8","nodeType":"VariableDeclaration","scope":559,"src":"3366:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":555,"name":"address","nodeType":"ElementaryTypeName","src":"3366:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3349:34:8"},"returnParameters":{"id":558,"nodeType":"ParameterList","parameters":[],"src":"3392:0:8"},"scope":569,"src":"3329:64:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":560,"nodeType":"StructuredDocumentation","src":"3399:282:8","text":" @notice Emergency return tokens from an order regardless of status.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the from the unfilled order"},"functionSelector":"68bce712","id":568,"implemented":false,"kind":"function","modifiers":[],"name":"emergencyCancelOrder","nameLocation":"3695:20:8","nodeType":"FunctionDefinition","parameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":563,"mutability":"mutable","name":"tokenIn","nameLocation":"3723:7:8","nodeType":"VariableDeclaration","scope":568,"src":"3716:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":562,"nodeType":"UserDefinedTypeName","pathNode":{"id":561,"name":"IERC20","nameLocations":["3716:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3716:6:8"},"referencedDeclaration":9632,"src":"3716:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":565,"mutability":"mutable","name":"receiver","nameLocation":"3740:8:8","nodeType":"VariableDeclaration","scope":568,"src":"3732:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":564,"name":"address","nodeType":"ElementaryTypeName","src":"3732:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3715:34:8"},"returnParameters":{"id":567,"nodeType":"ParameterList","parameters":[],"src":"3758:0:8"},"scope":569,"src":"3686:73:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":570,"src":"449:3312:8","usedErrors":[375,380,387,394,399,510,516,519,694,697],"usedEvents":[439,495,505,684]}],"src":"46:3716:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","exportedSymbols":{"IPoolHelperCommon":[635]},"id":636,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":571,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolHelperCommon","contractDependencies":[],"contractKind":"interface","documentation":{"id":572,"nodeType":"StructuredDocumentation","src":"72:85:9","text":"@notice Common interface for helper functions that operate on a subset of pools."},"fullyImplemented":false,"id":635,"linearizedBaseContracts":[635],"name":"IPoolHelperCommon","nameLocation":"167:17:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":573,"nodeType":"StructuredDocumentation","src":"191:176:9","text":" @notice Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\n @param pool Address of the pool that was added"},"eventSelector":"099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c7","id":577,"name":"PoolAddedToSet","nameLocation":"378:14:9","nodeType":"EventDefinition","parameters":{"id":576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":575,"indexed":false,"mutability":"mutable","name":"pool","nameLocation":"401:4:9","nodeType":"VariableDeclaration","scope":577,"src":"393:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":574,"name":"address","nodeType":"ElementaryTypeName","src":"393:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"392:14:9"},"src":"372:35:9"},{"anonymous":false,"documentation":{"id":578,"nodeType":"StructuredDocumentation","src":"413:182:9","text":" @notice Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\n @param pool Address of the pool that was removed"},"eventSelector":"2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc","id":582,"name":"PoolRemovedFromSet","nameLocation":"606:18:9","nodeType":"EventDefinition","parameters":{"id":581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":580,"indexed":false,"mutability":"mutable","name":"pool","nameLocation":"633:4:9","nodeType":"VariableDeclaration","scope":582,"src":"625:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":579,"name":"address","nodeType":"ElementaryTypeName","src":"625:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"624:14:9"},"src":"600:39:9"},{"documentation":{"id":583,"nodeType":"StructuredDocumentation","src":"645:118:9","text":" @notice Cannot add a pool that is already there.\n @param pool Address of the pool being added"},"errorSelector":"391de812","id":587,"name":"PoolAlreadyInSet","nameLocation":"774:16:9","nodeType":"ErrorDefinition","parameters":{"id":586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":585,"mutability":"mutable","name":"pool","nameLocation":"799:4:9","nodeType":"VariableDeclaration","scope":587,"src":"791:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":584,"name":"address","nodeType":"ElementaryTypeName","src":"791:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"790:14:9"},"src":"768:37:9"},{"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"811:120:9","text":" @notice Cannot remove a pool that was not added.\n @param pool Address of the pool being removed"},"errorSelector":"79ff313f","id":592,"name":"PoolNotInSet","nameLocation":"942:12:9","nodeType":"ErrorDefinition","parameters":{"id":591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":590,"mutability":"mutable","name":"pool","nameLocation":"963:4:9","nodeType":"VariableDeclaration","scope":592,"src":"955:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":589,"name":"address","nodeType":"ElementaryTypeName","src":"955:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"954:14:9"},"src":"936:33:9"},{"documentation":{"id":593,"nodeType":"StructuredDocumentation","src":"975:61:9","text":"@notice An index is beyond the current bounds of the set."},"errorSelector":"4e23d035","id":595,"name":"IndexOutOfBounds","nameLocation":"1047:16:9","nodeType":"ErrorDefinition","parameters":{"id":594,"nodeType":"ParameterList","parameters":[],"src":"1063:2:9"},"src":"1041:25:9"},{"documentation":{"id":596,"nodeType":"StructuredDocumentation","src":"1284:283:9","text":" @notice Add pools to the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add\n pools to the set.\n @param newPools List of pools to add"},"functionSelector":"b36a4ab1","id":602,"implemented":false,"kind":"function","modifiers":[],"name":"addPools","nameLocation":"1581:8:9","nodeType":"FunctionDefinition","parameters":{"id":600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":599,"mutability":"mutable","name":"newPools","nameLocation":"1609:8:9","nodeType":"VariableDeclaration","scope":602,"src":"1590:27:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":597,"name":"address","nodeType":"ElementaryTypeName","src":"1590:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":598,"nodeType":"ArrayTypeName","src":"1590:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1589:29:9"},"returnParameters":{"id":601,"nodeType":"ParameterList","parameters":[],"src":"1627:0:9"},"scope":635,"src":"1572:56:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":603,"nodeType":"StructuredDocumentation","src":"1634:293:9","text":" @notice Remove pools from the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove\n pools from the set.\n @param pools List of pools to remove"},"functionSelector":"4b164140","id":609,"implemented":false,"kind":"function","modifiers":[],"name":"removePools","nameLocation":"1941:11:9","nodeType":"FunctionDefinition","parameters":{"id":607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"pools","nameLocation":"1970:5:9","nodeType":"VariableDeclaration","scope":609,"src":"1953:22:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":604,"name":"address","nodeType":"ElementaryTypeName","src":"1953:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":605,"nodeType":"ArrayTypeName","src":"1953:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1952:24:9"},"returnParameters":{"id":608,"nodeType":"ParameterList","parameters":[],"src":"1985:0:9"},"scope":635,"src":"1932:54:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":610,"nodeType":"StructuredDocumentation","src":"2231:221:9","text":" @notice Get the number of pools.\n @dev Needed to support pagination in case the set is too large to process in a single transaction.\n @return poolCount The current number of pools in the set"},"functionSelector":"8eec5d70","id":615,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"2466:12:9","nodeType":"FunctionDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[],"src":"2478:2:9"},"returnParameters":{"id":614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":615,"src":"2504:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":612,"name":"uint256","nodeType":"ElementaryTypeName","src":"2504:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2503:9:9"},"scope":635,"src":"2457:56:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":616,"nodeType":"StructuredDocumentation","src":"2519:178:9","text":" @notice Check whether a pool is in the set of pools.\n @param pool Pool to check\n @return isPausable True if the pool is in the set, false otherwise"},"functionSelector":"1246dbf5","id":623,"implemented":false,"kind":"function","modifiers":[],"name":"hasPool","nameLocation":"2711:7:9","nodeType":"FunctionDefinition","parameters":{"id":619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":618,"mutability":"mutable","name":"pool","nameLocation":"2727:4:9","nodeType":"VariableDeclaration","scope":623,"src":"2719:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":617,"name":"address","nodeType":"ElementaryTypeName","src":"2719:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2718:14:9"},"returnParameters":{"id":622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":623,"src":"2756:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":620,"name":"bool","nodeType":"ElementaryTypeName","src":"2756:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2755:6:9"},"scope":635,"src":"2702:60:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":624,"nodeType":"StructuredDocumentation","src":"2768:240:9","text":" @notice Get a range of pools.\n @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n @param from Start index\n @param to End index\n @return pools List of pools"},"functionSelector":"bbe95837","id":634,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"3022:8:9","nodeType":"FunctionDefinition","parameters":{"id":629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":626,"mutability":"mutable","name":"from","nameLocation":"3039:4:9","nodeType":"VariableDeclaration","scope":634,"src":"3031:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":625,"name":"uint256","nodeType":"ElementaryTypeName","src":"3031:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":628,"mutability":"mutable","name":"to","nameLocation":"3053:2:9","nodeType":"VariableDeclaration","scope":634,"src":"3045:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":627,"name":"uint256","nodeType":"ElementaryTypeName","src":"3045:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3030:26:9"},"returnParameters":{"id":633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":632,"mutability":"mutable","name":"pools","nameLocation":"3097:5:9","nodeType":"VariableDeclaration","scope":634,"src":"3080:22:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":630,"name":"address","nodeType":"ElementaryTypeName","src":"3080:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":631,"nodeType":"ArrayTypeName","src":"3080:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3079:24:9"},"scope":635,"src":"3013:91:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":636,"src":"157:2949:9","usedErrors":[587,592,595],"usedEvents":[577,582]}],"src":"46:3061:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[646]},"id":647,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":637,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolPauseHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":638,"nodeType":"StructuredDocumentation","src":"72:482:10","text":" @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n addressed here, and must still be done through the Vault."},"fullyImplemented":false,"id":646,"linearizedBaseContracts":[646],"name":"IPoolPauseHelper","nameLocation":"565:16:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":639,"nodeType":"StructuredDocumentation","src":"588:702:10","text":" @notice Pause a set of pools.\n @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n the same account that can add or remove pools from the pausable list.\n Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n the individual pools' pause managers.\n @param pools List of pools to pause"},"functionSelector":"a20dc529","id":645,"implemented":false,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"1304:10:10","nodeType":"FunctionDefinition","parameters":{"id":643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":642,"mutability":"mutable","name":"pools","nameLocation":"1332:5:10","nodeType":"VariableDeclaration","scope":645,"src":"1315:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":640,"name":"address","nodeType":"ElementaryTypeName","src":"1315:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":641,"nodeType":"ArrayTypeName","src":"1315:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1314:24:10"},"returnParameters":{"id":644,"nodeType":"ParameterList","parameters":[],"src":"1347:0:10"},"scope":646,"src":"1295:53:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":647,"src":"555:795:10","usedErrors":[],"usedEvents":[]}],"src":"46:1305:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[663]},"id":664,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":648,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolSwapFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":649,"nodeType":"StructuredDocumentation","src":"72:541:11","text":" @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n contract, which allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n allow governance to set fees can be added (i.e., they must not have swap managers)."},"fullyImplemented":false,"id":663,"linearizedBaseContracts":[663],"name":"IPoolSwapFeeHelper","nameLocation":"624:18:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":650,"nodeType":"StructuredDocumentation","src":"649:380:11","text":" @notice Cannot add a pool that has a swap manager.\n @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n to grant this permission.\n @param pool Address of the pool being added"},"errorSelector":"f043494a","id":654,"name":"PoolHasSwapManager","nameLocation":"1040:18:11","nodeType":"ErrorDefinition","parameters":{"id":653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":652,"mutability":"mutable","name":"pool","nameLocation":"1067:4:11","nodeType":"VariableDeclaration","scope":654,"src":"1059:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":651,"name":"address","nodeType":"ElementaryTypeName","src":"1059:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1058:14:11"},"src":"1034:39:11"},{"documentation":{"id":655,"nodeType":"StructuredDocumentation","src":"1291:500:11","text":" @notice Set the static swap fee percentage on a given pool.\n @dev This is a permissioned function. Governance must grant this contract permission to call\n `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n cannot be changed by governance if it is set, and the pool cannot be added to the set.\n @param pool The address of the pool\n @param swapFeePercentage The new swap fee percentage"},"functionSelector":"d15126ba","id":662,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"1805:26:11","nodeType":"FunctionDefinition","parameters":{"id":660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":657,"mutability":"mutable","name":"pool","nameLocation":"1840:4:11","nodeType":"VariableDeclaration","scope":662,"src":"1832:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":656,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":659,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1854:17:11","nodeType":"VariableDeclaration","scope":662,"src":"1846:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":658,"name":"uint256","nodeType":"ElementaryTypeName","src":"1846:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1831:41:11"},"returnParameters":{"id":661,"nodeType":"ParameterList","parameters":[],"src":"1881:0:11"},"scope":663,"src":"1796:86:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":664,"src":"614:1270:11","usedErrors":[654],"usedEvents":[]}],"src":"46:1839:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","exportedSymbols":{"IERC20":[9632],"IProtocolFeeBurner":[718]},"id":719,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":665,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":667,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":719,"sourceUnit":9633,"src":"72:72:12","symbolAliases":[{"foreign":{"id":666,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":718,"linearizedBaseContracts":[718],"name":"IProtocolFeeBurner","nameLocation":"156:18:12","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":668,"nodeType":"StructuredDocumentation","src":"181:576:12","text":" @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n @param pool The pool on which the fee was collected (used for event tracking)\n @param feeToken The token in which the fee was originally collected\n @param exactFeeTokenAmountIn The number of feeTokens collected\n @param targetToken The preferred token for fee collection (e.g., USDC)\n @param actualTargetTokenAmountOut The number of target tokens actually received\n @param recipient The address where the target tokens were sent"},"eventSelector":"77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d","id":684,"name":"ProtocolFeeBurned","nameLocation":"768:17:12","nodeType":"EventDefinition","parameters":{"id":683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":670,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"811:4:12","nodeType":"VariableDeclaration","scope":684,"src":"795:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":669,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":673,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"840:8:12","nodeType":"VariableDeclaration","scope":684,"src":"825:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":672,"nodeType":"UserDefinedTypeName","pathNode":{"id":671,"name":"IERC20","nameLocations":["825:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"825:6:12"},"referencedDeclaration":9632,"src":"825:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":675,"indexed":false,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"866:21:12","nodeType":"VariableDeclaration","scope":684,"src":"858:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":674,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":678,"indexed":true,"mutability":"mutable","name":"targetToken","nameLocation":"912:11:12","nodeType":"VariableDeclaration","scope":684,"src":"897:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":677,"nodeType":"UserDefinedTypeName","pathNode":{"id":676,"name":"IERC20","nameLocations":["897:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"897:6:12"},"referencedDeclaration":9632,"src":"897:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":680,"indexed":false,"mutability":"mutable","name":"actualTargetTokenAmountOut","nameLocation":"941:26:12","nodeType":"VariableDeclaration","scope":684,"src":"933:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":679,"name":"uint256","nodeType":"ElementaryTypeName","src":"933:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":682,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"985:9:12","nodeType":"VariableDeclaration","scope":684,"src":"977:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":681,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"785:215:12"},"src":"762:239:12"},{"documentation":{"id":685,"nodeType":"StructuredDocumentation","src":"1007:269:12","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":694,"name":"AmountOutBelowMin","nameLocation":"1287:17:12","nodeType":"ErrorDefinition","parameters":{"id":693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":688,"mutability":"mutable","name":"tokenOut","nameLocation":"1312:8:12","nodeType":"VariableDeclaration","scope":694,"src":"1305:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":687,"nodeType":"UserDefinedTypeName","pathNode":{"id":686,"name":"IERC20","nameLocations":["1305:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1305:6:12"},"referencedDeclaration":9632,"src":"1305:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":690,"mutability":"mutable","name":"amountOut","nameLocation":"1330:9:12","nodeType":"VariableDeclaration","scope":694,"src":"1322:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":689,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":692,"mutability":"mutable","name":"minAmountOut","nameLocation":"1349:12:12","nodeType":"VariableDeclaration","scope":694,"src":"1341:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":691,"name":"uint256","nodeType":"ElementaryTypeName","src":"1341:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1304:58:12"},"src":"1281:82:12"},{"documentation":{"id":695,"nodeType":"StructuredDocumentation","src":"1369:91:12","text":"@notice The swap transaction was not validated before the specified deadline timestamp."},"errorSelector":"e08b8af0","id":697,"name":"SwapDeadline","nameLocation":"1471:12:12","nodeType":"ErrorDefinition","parameters":{"id":696,"nodeType":"ParameterList","parameters":[],"src":"1483:2:12"},"src":"1465:21:12"},{"documentation":{"id":698,"nodeType":"StructuredDocumentation","src":"1492:750:12","text":" @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (token out of the swap)\n @param minTargetTokenAmountOut The minimum amount out for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":717,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"2256:4:12","nodeType":"FunctionDefinition","parameters":{"id":715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":700,"mutability":"mutable","name":"pool","nameLocation":"2278:4:12","nodeType":"VariableDeclaration","scope":717,"src":"2270:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":699,"name":"address","nodeType":"ElementaryTypeName","src":"2270:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":703,"mutability":"mutable","name":"feeToken","nameLocation":"2299:8:12","nodeType":"VariableDeclaration","scope":717,"src":"2292:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":702,"nodeType":"UserDefinedTypeName","pathNode":{"id":701,"name":"IERC20","nameLocations":["2292:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2292:6:12"},"referencedDeclaration":9632,"src":"2292:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":705,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2325:21:12","nodeType":"VariableDeclaration","scope":717,"src":"2317:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":704,"name":"uint256","nodeType":"ElementaryTypeName","src":"2317:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":708,"mutability":"mutable","name":"targetToken","nameLocation":"2363:11:12","nodeType":"VariableDeclaration","scope":717,"src":"2356:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":707,"nodeType":"UserDefinedTypeName","pathNode":{"id":706,"name":"IERC20","nameLocations":["2356:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2356:6:12"},"referencedDeclaration":9632,"src":"2356:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":710,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2392:23:12","nodeType":"VariableDeclaration","scope":717,"src":"2384:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":709,"name":"uint256","nodeType":"ElementaryTypeName","src":"2384:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":712,"mutability":"mutable","name":"recipient","nameLocation":"2433:9:12","nodeType":"VariableDeclaration","scope":717,"src":"2425:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":711,"name":"address","nodeType":"ElementaryTypeName","src":"2425:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":714,"mutability":"mutable","name":"deadline","nameLocation":"2460:8:12","nodeType":"VariableDeclaration","scope":717,"src":"2452:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":713,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2260:214:12"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[],"src":"2483:0:12"},"scope":718,"src":"2247:237:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":719,"src":"146:2340:12","usedErrors":[694,697],"usedEvents":[684]}],"src":"46:2441:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeHelper":[738]},"id":739,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":720,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":721,"nodeType":"StructuredDocumentation","src":"72:489:13","text":" @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n controller."},"fullyImplemented":false,"id":738,"linearizedBaseContracts":[738],"name":"IProtocolFeeHelper","nameLocation":"572:18:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":722,"nodeType":"StructuredDocumentation","src":"809:381:13","text":" @notice Set the protocol swap fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"fd267f39","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"1204:28:13","nodeType":"FunctionDefinition","parameters":{"id":727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":724,"mutability":"mutable","name":"pool","nameLocation":"1241:4:13","nodeType":"VariableDeclaration","scope":729,"src":"1233:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":723,"name":"address","nodeType":"ElementaryTypeName","src":"1233:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":726,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1255:28:13","nodeType":"VariableDeclaration","scope":729,"src":"1247:36:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":725,"name":"uint256","nodeType":"ElementaryTypeName","src":"1247:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1232:52:13"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[],"src":"1293:0:13"},"scope":738,"src":"1195:99:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":730,"nodeType":"StructuredDocumentation","src":"1300:384:13","text":" @notice Set the protocol yield fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"abaa3356","id":737,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"1698:29:13","nodeType":"FunctionDefinition","parameters":{"id":735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":732,"mutability":"mutable","name":"pool","nameLocation":"1736:4:13","nodeType":"VariableDeclaration","scope":737,"src":"1728:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":731,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":734,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1750:29:13","nodeType":"VariableDeclaration","scope":737,"src":"1742:37:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":733,"name":"uint256","nodeType":"ElementaryTypeName","src":"1742:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:53:13"},"returnParameters":{"id":736,"nodeType":"ParameterList","parameters":[],"src":"1789:0:13"},"scope":738,"src":"1689:101:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":739,"src":"562:1230:13","usedErrors":[],"usedEvents":[]}],"src":"46:1747:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[9632],"IERC4626":[8902],"IProtocolFeeBurner":[718],"IProtocolFeeController":[1673],"IProtocolFeeSweeper":[907]},"id":908,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":740,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":742,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":908,"sourceUnit":9633,"src":"72:72:14","symbolAliases":[{"foreign":{"id":741,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":744,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":908,"sourceUnit":8903,"src":"145:75:14","symbolAliases":[{"foreign":{"id":743,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"154:8:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"../vault/IProtocolFeeController.sol","id":746,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":908,"sourceUnit":1674,"src":"222:77:14","symbolAliases":[{"foreign":{"id":745,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"231:22:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":748,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":908,"sourceUnit":719,"src":"300:62:14","symbolAliases":[{"foreign":{"id":747,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"309:18:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeSweeper","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":907,"linearizedBaseContracts":[907],"name":"IProtocolFeeSweeper","nameLocation":"374:19:14","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":749,"nodeType":"StructuredDocumentation","src":"400:143:14","text":" @notice Emitted when the target token is set or updated.\n @param token The preferred token for receiving protocol fees"},"eventSelector":"873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da6","id":754,"name":"TargetTokenSet","nameLocation":"554:14:14","nodeType":"EventDefinition","parameters":{"id":753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":752,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"584:5:14","nodeType":"VariableDeclaration","scope":754,"src":"569:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":751,"nodeType":"UserDefinedTypeName","pathNode":{"id":750,"name":"IERC20","nameLocations":["569:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"569:6:14"},"referencedDeclaration":9632,"src":"569:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"568:22:14"},"src":"548:43:14"},{"anonymous":false,"documentation":{"id":755,"nodeType":"StructuredDocumentation","src":"597:160:14","text":" @notice Emitted when the fee recipient address is set or updated.\n @param feeRecipient The final destination of collected protocol fees"},"eventSelector":"bf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb323","id":759,"name":"FeeRecipientSet","nameLocation":"768:15:14","nodeType":"EventDefinition","parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":757,"indexed":true,"mutability":"mutable","name":"feeRecipient","nameLocation":"800:12:14","nodeType":"VariableDeclaration","scope":759,"src":"784:28:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":756,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"783:30:14"},"src":"762:52:14"},{"anonymous":false,"documentation":{"id":760,"nodeType":"StructuredDocumentation","src":"820:501:14","text":" @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n @param pool The pool on which the fee was collected\n @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n @param feeTokenAmount The number of feeTokens\n @param recipient The recipient of the fee tokens"},"eventSelector":"d6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc8","id":771,"name":"ProtocolFeeSwept","nameLocation":"1332:16:14","nodeType":"EventDefinition","parameters":{"id":770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1365:4:14","nodeType":"VariableDeclaration","scope":771,"src":"1349:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":761,"name":"address","nodeType":"ElementaryTypeName","src":"1349:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":765,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"1386:8:14","nodeType":"VariableDeclaration","scope":771,"src":"1371:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":764,"nodeType":"UserDefinedTypeName","pathNode":{"id":763,"name":"IERC20","nameLocations":["1371:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1371:6:14"},"referencedDeclaration":9632,"src":"1371:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":767,"indexed":false,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1404:14:14","nodeType":"VariableDeclaration","scope":771,"src":"1396:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":766,"name":"uint256","nodeType":"ElementaryTypeName","src":"1396:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":769,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"1428:9:14","nodeType":"VariableDeclaration","scope":771,"src":"1420:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":768,"name":"address","nodeType":"ElementaryTypeName","src":"1420:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1348:90:14"},"src":"1326:113:14"},{"anonymous":false,"documentation":{"id":772,"nodeType":"StructuredDocumentation","src":"1445:294:14","text":" @notice Emitted when a burner is added to the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was added"},"eventSelector":"0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd1","id":776,"name":"ProtocolFeeBurnerAdded","nameLocation":"1750:22:14","nodeType":"EventDefinition","parameters":{"id":775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"1789:17:14","nodeType":"VariableDeclaration","scope":776,"src":"1773:33:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":773,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:35:14"},"src":"1744:64:14"},{"anonymous":false,"documentation":{"id":777,"nodeType":"StructuredDocumentation","src":"1814:300:14","text":" @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was removed"},"eventSelector":"0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf","id":781,"name":"ProtocolFeeBurnerRemoved","nameLocation":"2125:24:14","nodeType":"EventDefinition","parameters":{"id":780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":779,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2166:17:14","nodeType":"VariableDeclaration","scope":781,"src":"2150:33:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":778,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2149:35:14"},"src":"2119:66:14"},{"documentation":{"id":782,"nodeType":"StructuredDocumentation","src":"2191:41:14","text":"@notice The fee recipient is invalid."},"errorSelector":"768dc598","id":784,"name":"InvalidFeeRecipient","nameLocation":"2243:19:14","nodeType":"ErrorDefinition","parameters":{"id":783,"nodeType":"ParameterList","parameters":[],"src":"2262:2:14"},"src":"2237:28:14"},{"documentation":{"id":785,"nodeType":"StructuredDocumentation","src":"2271:40:14","text":"@notice The target token is invalid."},"errorSelector":"8562eb45","id":787,"name":"InvalidTargetToken","nameLocation":"2322:18:14","nodeType":"ErrorDefinition","parameters":{"id":786,"nodeType":"ParameterList","parameters":[],"src":"2340:2:14"},"src":"2316:27:14"},{"documentation":{"id":788,"nodeType":"StructuredDocumentation","src":"2349:59:14","text":"@notice The protocol fee burner to be added is invalid."},"errorSelector":"31ec2736","id":790,"name":"InvalidProtocolFeeBurner","nameLocation":"2419:24:14","nodeType":"ErrorDefinition","parameters":{"id":789,"nodeType":"ParameterList","parameters":[],"src":"2443:2:14"},"src":"2413:33:14"},{"documentation":{"id":791,"nodeType":"StructuredDocumentation","src":"2452:148:14","text":" @notice The specified fee burner has not been approved.\n @param protocolFeeBurner The address of the unsupported fee burner"},"errorSelector":"38553f6c","id":795,"name":"UnsupportedProtocolFeeBurner","nameLocation":"2611:28:14","nodeType":"ErrorDefinition","parameters":{"id":794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":793,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2648:17:14","nodeType":"VariableDeclaration","scope":795,"src":"2640:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":792,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2639:27:14"},"src":"2605:62:14"},{"documentation":{"id":796,"nodeType":"StructuredDocumentation","src":"2673:167:14","text":" @notice Protocol fee burners can only be added to the allowlist once.\n @param protocolFeeBurner The address of an approved protocol fee burner"},"errorSelector":"6fe47af6","id":800,"name":"ProtocolFeeBurnerAlreadyAdded","nameLocation":"2851:29:14","nodeType":"ErrorDefinition","parameters":{"id":799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":798,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2889:17:14","nodeType":"VariableDeclaration","scope":800,"src":"2881:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":797,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2880:27:14"},"src":"2845:63:14"},{"documentation":{"id":801,"nodeType":"StructuredDocumentation","src":"2914:202:14","text":" @notice Protocol fee burners must be added to the allowlist before being removed.\n @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist"},"errorSelector":"bca5ab34","id":805,"name":"ProtocolFeeBurnerNotAdded","nameLocation":"3127:25:14","nodeType":"ErrorDefinition","parameters":{"id":804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":803,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"3161:17:14","nodeType":"VariableDeclaration","scope":805,"src":"3153:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":802,"name":"address","nodeType":"ElementaryTypeName","src":"3153:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3152:27:14"},"src":"3121:59:14"},{"documentation":{"id":806,"nodeType":"StructuredDocumentation","src":"3186:235:14","text":" @notice The burner did not consume its entire allowance.\n @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n approval that could be exploited later."},"errorSelector":"c5bc8d51","id":808,"name":"BurnerDidNotConsumeAllowance","nameLocation":"3432:28:14","nodeType":"ErrorDefinition","parameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"3460:2:14"},"src":"3426:37:14"},{"documentation":{"id":809,"nodeType":"StructuredDocumentation","src":"3469:56:14","text":"@notice Unwrapping is not allowed for the operation."},"errorSelector":"ca9e3a1e","id":811,"name":"UnwrapIsNotAllowed","nameLocation":"3536:18:14","nodeType":"ErrorDefinition","parameters":{"id":810,"nodeType":"ParameterList","parameters":[],"src":"3554:2:14"},"src":"3530:27:14"},{"documentation":{"id":812,"nodeType":"StructuredDocumentation","src":"3563:1358:14","text":" @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n then call the sweeper to put in the order with the burner.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"b9746995","id":827,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForToken","nameLocation":"4935:25:14","nodeType":"FunctionDefinition","parameters":{"id":825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":814,"mutability":"mutable","name":"pool","nameLocation":"4978:4:14","nodeType":"VariableDeclaration","scope":827,"src":"4970:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":813,"name":"address","nodeType":"ElementaryTypeName","src":"4970:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":817,"mutability":"mutable","name":"feeToken","nameLocation":"4999:8:14","nodeType":"VariableDeclaration","scope":827,"src":"4992:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":816,"nodeType":"UserDefinedTypeName","pathNode":{"id":815,"name":"IERC20","nameLocations":["4992:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4992:6:14"},"referencedDeclaration":9632,"src":"4992:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":819,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5025:23:14","nodeType":"VariableDeclaration","scope":827,"src":"5017:31:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":818,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":821,"mutability":"mutable","name":"deadline","nameLocation":"5066:8:14","nodeType":"VariableDeclaration","scope":827,"src":"5058:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":820,"name":"uint256","nodeType":"ElementaryTypeName","src":"5058:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":824,"mutability":"mutable","name":"feeBurner","nameLocation":"5103:9:14","nodeType":"VariableDeclaration","scope":827,"src":"5084:28:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":823,"nodeType":"UserDefinedTypeName","pathNode":{"id":822,"name":"IProtocolFeeBurner","nameLocations":["5084:18:14"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"5084:18:14"},"referencedDeclaration":718,"src":"5084:18:14","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"4960:158:14"},"returnParameters":{"id":826,"nodeType":"ParameterList","parameters":[],"src":"5127:0:14"},"scope":907,"src":"4926:202:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":828,"nodeType":"StructuredDocumentation","src":"5134:501:14","text":" @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"88f6d2a4","id":843,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"5649:32:14","nodeType":"FunctionDefinition","parameters":{"id":841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":830,"mutability":"mutable","name":"pool","nameLocation":"5699:4:14","nodeType":"VariableDeclaration","scope":843,"src":"5691:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":829,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":833,"mutability":"mutable","name":"feeToken","nameLocation":"5722:8:14","nodeType":"VariableDeclaration","scope":843,"src":"5713:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":832,"nodeType":"UserDefinedTypeName","pathNode":{"id":831,"name":"IERC4626","nameLocations":["5713:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"5713:8:14"},"referencedDeclaration":8902,"src":"5713:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":835,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5748:23:14","nodeType":"VariableDeclaration","scope":843,"src":"5740:31:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":834,"name":"uint256","nodeType":"ElementaryTypeName","src":"5740:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":837,"mutability":"mutable","name":"deadline","nameLocation":"5789:8:14","nodeType":"VariableDeclaration","scope":843,"src":"5781:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":836,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":840,"mutability":"mutable","name":"feeBurner","nameLocation":"5826:9:14","nodeType":"VariableDeclaration","scope":843,"src":"5807:28:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":839,"nodeType":"UserDefinedTypeName","pathNode":{"id":838,"name":"IProtocolFeeBurner","nameLocations":["5807:18:14"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"5807:18:14"},"referencedDeclaration":718,"src":"5807:18:14","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"5681:160:14"},"returnParameters":{"id":842,"nodeType":"ParameterList","parameters":[],"src":"5850:0:14"},"scope":907,"src":"5640:211:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":844,"nodeType":"StructuredDocumentation","src":"5857:269:14","text":" @notice Return the address of the current `ProtocolFeeController` from the Vault.\n @dev It is not immutable in the Vault, so we need to fetch it every time.\n @return protocolFeeController The address of the current `ProtocolFeeController`"},"functionSelector":"85f2dbd4","id":850,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"6140:24:14","nodeType":"FunctionDefinition","parameters":{"id":845,"nodeType":"ParameterList","parameters":[],"src":"6164:2:14"},"returnParameters":{"id":849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":850,"src":"6190:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":847,"nodeType":"UserDefinedTypeName","pathNode":{"id":846,"name":"IProtocolFeeController","nameLocations":["6190:22:14"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"6190:22:14"},"referencedDeclaration":1673,"src":"6190:22:14","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"6189:24:14"},"scope":907,"src":"6131:83:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":851,"nodeType":"StructuredDocumentation","src":"6220:214:14","text":" @notice Getter for the target token.\n @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n @return targetToken The current target token"},"functionSelector":"80db0d51","id":857,"implemented":false,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"6448:14:14","nodeType":"FunctionDefinition","parameters":{"id":852,"nodeType":"ParameterList","parameters":[],"src":"6462:2:14"},"returnParameters":{"id":856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":855,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":857,"src":"6488:6:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":854,"nodeType":"UserDefinedTypeName","pathNode":{"id":853,"name":"IERC20","nameLocations":["6488:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"6488:6:14"},"referencedDeclaration":9632,"src":"6488:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6487:8:14"},"scope":907,"src":"6439:57:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":858,"nodeType":"StructuredDocumentation","src":"6502:167:14","text":" @notice Getter for the current fee recipient.\n @dev Can be changed by `setFeeRecipient`.\n @return feeRecipient The current fee recipient"},"functionSelector":"4ccb20c0","id":863,"implemented":false,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"6683:15:14","nodeType":"FunctionDefinition","parameters":{"id":859,"nodeType":"ParameterList","parameters":[],"src":"6698:2:14"},"returnParameters":{"id":862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":863,"src":"6724:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":860,"name":"address","nodeType":"ElementaryTypeName","src":"6724:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6723:9:14"},"scope":907,"src":"6674:59:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":864,"nodeType":"StructuredDocumentation","src":"6739:263:14","text":" @notice Check whether a given address corresponds to an approved protocol fee burner.\n @param protocolFeeBurner The address to be checked\n @return isApproved True if the given address is on the approved protocol fee burner allowlist"},"functionSelector":"9c5cee9b","id":871,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"7016:27:14","nodeType":"FunctionDefinition","parameters":{"id":867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":866,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7052:17:14","nodeType":"VariableDeclaration","scope":871,"src":"7044:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":865,"name":"address","nodeType":"ElementaryTypeName","src":"7044:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7043:27:14"},"returnParameters":{"id":870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":869,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":871,"src":"7094:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":868,"name":"bool","nodeType":"ElementaryTypeName","src":"7094:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7093:6:14"},"scope":907,"src":"7007:93:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":872,"nodeType":"StructuredDocumentation","src":"7106:169:14","text":" @notice Update the fee recipient address.\n @dev This is a permissioned function.\n @param feeRecipient The address of the new fee recipient"},"functionSelector":"e74b981b","id":877,"implemented":false,"kind":"function","modifiers":[],"name":"setFeeRecipient","nameLocation":"7289:15:14","nodeType":"FunctionDefinition","parameters":{"id":875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":874,"mutability":"mutable","name":"feeRecipient","nameLocation":"7313:12:14","nodeType":"VariableDeclaration","scope":877,"src":"7305:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":873,"name":"address","nodeType":"ElementaryTypeName","src":"7305:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7304:22:14"},"returnParameters":{"id":876,"nodeType":"ParameterList","parameters":[],"src":"7335:0:14"},"scope":907,"src":"7280:56:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":878,"nodeType":"StructuredDocumentation","src":"7342:222:14","text":" @notice Update the address of the target token.\n @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n @param targetToken The address of the target token"},"functionSelector":"1b66cb00","id":884,"implemented":false,"kind":"function","modifiers":[],"name":"setTargetToken","nameLocation":"7578:14:14","nodeType":"FunctionDefinition","parameters":{"id":882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":881,"mutability":"mutable","name":"targetToken","nameLocation":"7600:11:14","nodeType":"VariableDeclaration","scope":884,"src":"7593:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":880,"nodeType":"UserDefinedTypeName","pathNode":{"id":879,"name":"IERC20","nameLocations":["7593:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"7593:6:14"},"referencedDeclaration":9632,"src":"7593:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7592:20:14"},"returnParameters":{"id":883,"nodeType":"ParameterList","parameters":[],"src":"7621:0:14"},"scope":907,"src":"7569:53:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":885,"nodeType":"StructuredDocumentation","src":"7628:300:14","text":" @notice Add an approved fee burner to the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of an approved protocol fee burner to be added"},"functionSelector":"e20c482f","id":891,"implemented":false,"kind":"function","modifiers":[],"name":"addProtocolFeeBurner","nameLocation":"7942:20:14","nodeType":"FunctionDefinition","parameters":{"id":889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":888,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7982:17:14","nodeType":"VariableDeclaration","scope":891,"src":"7963:36:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":887,"nodeType":"UserDefinedTypeName","pathNode":{"id":886,"name":"IProtocolFeeBurner","nameLocations":["7963:18:14"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"7963:18:14"},"referencedDeclaration":718,"src":"7963:18:14","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"7962:38:14"},"returnParameters":{"id":890,"nodeType":"ParameterList","parameters":[],"src":"8009:0:14"},"scope":907,"src":"7933:77:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":892,"nodeType":"StructuredDocumentation","src":"8016:304:14","text":" @notice Remove a fee burner from the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed"},"functionSelector":"b11f061e","id":898,"implemented":false,"kind":"function","modifiers":[],"name":"removeProtocolFeeBurner","nameLocation":"8334:23:14","nodeType":"FunctionDefinition","parameters":{"id":896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":895,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8377:17:14","nodeType":"VariableDeclaration","scope":898,"src":"8358:36:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":894,"nodeType":"UserDefinedTypeName","pathNode":{"id":893,"name":"IProtocolFeeBurner","nameLocations":["8358:18:14"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"8358:18:14"},"referencedDeclaration":718,"src":"8358:18:14","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"8357:38:14"},"returnParameters":{"id":897,"nodeType":"ParameterList","parameters":[],"src":"8404:0:14"},"scope":907,"src":"8325:80:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":899,"nodeType":"StructuredDocumentation","src":"8411:265:14","text":" @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n @param feeTokens The tokens to recover"},"functionSelector":"b0edcc53","id":906,"implemented":false,"kind":"function","modifiers":[],"name":"recoverProtocolFees","nameLocation":"8690:19:14","nodeType":"FunctionDefinition","parameters":{"id":904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":903,"mutability":"mutable","name":"feeTokens","nameLocation":"8726:9:14","nodeType":"VariableDeclaration","scope":906,"src":"8710:25:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":901,"nodeType":"UserDefinedTypeName","pathNode":{"id":900,"name":"IERC20","nameLocations":["8710:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"8710:6:14"},"referencedDeclaration":9632,"src":"8710:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":902,"nodeType":"ArrayTypeName","src":"8710:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8709:27:14"},"returnParameters":{"id":905,"nodeType":"ParameterList","parameters":[],"src":"8745:0:14"},"scope":907,"src":"8681:65:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":908,"src":"364:8384:14","usedErrors":[784,787,790,795,800,805,808,811],"usedEvents":[754,759,771,776,781]}],"src":"46:8703:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol","exportedSymbols":{"AggregatorV3Interface":[8718],"IWeightedLPOracle":[952]},"id":953,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":909,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","file":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","id":911,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":953,"sourceUnit":8719,"src":"72:114:15","symbolAliases":[{"foreign":{"id":910,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"81:21:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IWeightedLPOracle","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":952,"linearizedBaseContracts":[952],"name":"IWeightedLPOracle","nameLocation":"198:17:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":912,"nodeType":"StructuredDocumentation","src":"222:315:15","text":" @notice Calculates the tvl based on the provided prices.\n @dev Prices are defined the same way as in the oracle feed, and scaled to 18-decimal FP values.\n @param prices An array of prices for the tokens in the pool\n @return tvl TVL calculated from the prices and current weights"},"functionSelector":"47bcac3b","id":920,"implemented":false,"kind":"function","modifiers":[],"name":"calculateTVL","nameLocation":"551:12:15","nodeType":"FunctionDefinition","parameters":{"id":916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":915,"mutability":"mutable","name":"prices","nameLocation":"580:6:15","nodeType":"VariableDeclaration","scope":920,"src":"564:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":913,"name":"int256","nodeType":"ElementaryTypeName","src":"564:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":914,"nodeType":"ArrayTypeName","src":"564:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"563:24:15"},"returnParameters":{"id":919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":918,"mutability":"mutable","name":"tvl","nameLocation":"619:3:15","nodeType":"VariableDeclaration","scope":920,"src":"611:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":917,"name":"uint256","nodeType":"ElementaryTypeName","src":"611:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"610:13:15"},"scope":952,"src":"542:82:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":921,"nodeType":"StructuredDocumentation","src":"630:174:15","text":" @notice Gets the latest feed data.\n @return prices An array of latest prices from the feeds\n @return updatedAt The timestamp of the last update"},"functionSelector":"af1296d3","id":929,"implemented":false,"kind":"function","modifiers":[],"name":"getFeedData","nameLocation":"818:11:15","nodeType":"FunctionDefinition","parameters":{"id":922,"nodeType":"ParameterList","parameters":[],"src":"829:2:15"},"returnParameters":{"id":928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":925,"mutability":"mutable","name":"prices","nameLocation":"871:6:15","nodeType":"VariableDeclaration","scope":929,"src":"855:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":923,"name":"int256","nodeType":"ElementaryTypeName","src":"855:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":924,"nodeType":"ArrayTypeName","src":"855:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":927,"mutability":"mutable","name":"updatedAt","nameLocation":"887:9:15","nodeType":"VariableDeclaration","scope":929,"src":"879:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":926,"name":"uint256","nodeType":"ElementaryTypeName","src":"879:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"854:43:15"},"scope":952,"src":"809:89:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":930,"nodeType":"StructuredDocumentation","src":"904:152:15","text":" @notice Gets the list of feeds used by the oracle.\n @return An array of AggregatorV3Interface instances representing the feeds."},"functionSelector":"7fe955d4","id":937,"implemented":false,"kind":"function","modifiers":[],"name":"getFeeds","nameLocation":"1070:8:15","nodeType":"FunctionDefinition","parameters":{"id":931,"nodeType":"ParameterList","parameters":[],"src":"1078:2:15"},"returnParameters":{"id":936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":937,"src":"1104:30:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":933,"nodeType":"UserDefinedTypeName","pathNode":{"id":932,"name":"AggregatorV3Interface","nameLocations":["1104:21:15"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1104:21:15"},"referencedDeclaration":8718,"src":"1104:21:15","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":934,"nodeType":"ArrayTypeName","src":"1104:23:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"src":"1103:32:15"},"scope":952,"src":"1061:75:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":938,"nodeType":"StructuredDocumentation","src":"1142:151:15","text":" @notice Gets the decimal scaling factors for each feed token.\n @return An array of scaling factors corresponding to each feed."},"functionSelector":"cd2c9e70","id":944,"implemented":false,"kind":"function","modifiers":[],"name":"getFeedTokenDecimalScalingFactors","nameLocation":"1307:33:15","nodeType":"FunctionDefinition","parameters":{"id":939,"nodeType":"ParameterList","parameters":[],"src":"1340:2:15"},"returnParameters":{"id":943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":944,"src":"1366:16:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":940,"name":"uint256","nodeType":"ElementaryTypeName","src":"1366:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":941,"nodeType":"ArrayTypeName","src":"1366:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1365:18:15"},"scope":952,"src":"1298:86:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":945,"nodeType":"StructuredDocumentation","src":"1390:154:15","text":" @notice Gets the current weights of the tokens in the pool.\n @return An array of weights corresponding to each token in the pool."},"functionSelector":"22acb867","id":951,"implemented":false,"kind":"function","modifiers":[],"name":"getWeights","nameLocation":"1558:10:15","nodeType":"FunctionDefinition","parameters":{"id":946,"nodeType":"ParameterList","parameters":[],"src":"1568:2:15"},"returnParameters":{"id":950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":949,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":951,"src":"1594:16:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":947,"name":"uint256","nodeType":"ElementaryTypeName","src":"1594:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":948,"nodeType":"ArrayTypeName","src":"1594:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1593:18:15"},"scope":952,"src":"1549:63:15","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":953,"src":"188:1426:15","usedErrors":[],"usedEvents":[]}],"src":"46:1569:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol","exportedSymbols":{"AggregatorV3Interface":[8718],"IWeightedLPOracle":[952],"IWeightedLPOracleFactory":[993],"IWeightedPool":[66]},"id":994,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":954,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","file":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","id":956,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":994,"sourceUnit":8719,"src":"72:114:16","symbolAliases":[{"foreign":{"id":955,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"81:21:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"../pool-weighted/IWeightedPool.sol","id":958,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":994,"sourceUnit":67,"src":"188:67:16","symbolAliases":[{"foreign":{"id":957,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"197:13:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol","file":"./IWeightedLPOracle.sol","id":960,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":994,"sourceUnit":953,"src":"256:60:16","symbolAliases":[{"foreign":{"id":959,"name":"IWeightedLPOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"265:17:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IWeightedLPOracleFactory","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":993,"linearizedBaseContracts":[993],"name":"IWeightedLPOracleFactory","nameLocation":"328:24:16","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"fe0fe762010efd636b9d44c1b529d2343a72d14538bd28a5a873e29e5e8956f2","id":970,"name":"WeightedLPOracleCreated","nameLocation":"365:23:16","nodeType":"EventDefinition","parameters":{"id":969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":963,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"411:4:16","nodeType":"VariableDeclaration","scope":970,"src":"389:26:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":962,"nodeType":"UserDefinedTypeName","pathNode":{"id":961,"name":"IWeightedPool","nameLocations":["389:13:16"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"389:13:16"},"referencedDeclaration":66,"src":"389:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"},{"constant":false,"id":966,"indexed":false,"mutability":"mutable","name":"oracle","nameLocation":"435:6:16","nodeType":"VariableDeclaration","scope":970,"src":"417:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"},"typeName":{"id":965,"nodeType":"UserDefinedTypeName","pathNode":{"id":964,"name":"IWeightedLPOracle","nameLocations":["417:17:16"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"417:17:16"},"referencedDeclaration":952,"src":"417:17:16","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"visibility":"internal"},{"constant":false,"id":968,"indexed":false,"mutability":"mutable","name":"oracleVersion","nameLocation":"451:13:16","nodeType":"VariableDeclaration","scope":970,"src":"443:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":967,"name":"uint256","nodeType":"ElementaryTypeName","src":"443:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"388:77:16"},"src":"359:107:16"},{"functionSelector":"cd1d9776","id":983,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"481:6:16","nodeType":"FunctionDefinition","parameters":{"id":978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":973,"mutability":"mutable","name":"pool","nameLocation":"511:4:16","nodeType":"VariableDeclaration","scope":983,"src":"497:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":972,"nodeType":"UserDefinedTypeName","pathNode":{"id":971,"name":"IWeightedPool","nameLocations":["497:13:16"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"497:13:16"},"referencedDeclaration":66,"src":"497:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"},{"constant":false,"id":977,"mutability":"mutable","name":"feeds","nameLocation":"556:5:16","nodeType":"VariableDeclaration","scope":983,"src":"525:36:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":975,"nodeType":"UserDefinedTypeName","pathNode":{"id":974,"name":"AggregatorV3Interface","nameLocations":["525:21:16"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"525:21:16"},"referencedDeclaration":8718,"src":"525:21:16","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":976,"nodeType":"ArrayTypeName","src":"525:23:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"src":"487:80:16"},"returnParameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"oracle","nameLocation":"604:6:16","nodeType":"VariableDeclaration","scope":983,"src":"586:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"},"typeName":{"id":980,"nodeType":"UserDefinedTypeName","pathNode":{"id":979,"name":"IWeightedLPOracle","nameLocations":["586:17:16"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"586:17:16"},"referencedDeclaration":952,"src":"586:17:16","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"visibility":"internal"}],"src":"585:26:16"},"scope":993,"src":"472:140:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"10d3d22e","id":992,"implemented":false,"kind":"function","modifiers":[],"name":"getOracle","nameLocation":"627:9:16","nodeType":"FunctionDefinition","parameters":{"id":987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":986,"mutability":"mutable","name":"pool","nameLocation":"651:4:16","nodeType":"VariableDeclaration","scope":992,"src":"637:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":985,"nodeType":"UserDefinedTypeName","pathNode":{"id":984,"name":"IWeightedPool","nameLocations":["637:13:16"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"637:13:16"},"referencedDeclaration":66,"src":"637:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"}],"src":"636:20:16"},"returnParameters":{"id":991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":990,"mutability":"mutable","name":"oracle","nameLocation":"698:6:16","nodeType":"VariableDeclaration","scope":992,"src":"680:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"},"typeName":{"id":989,"nodeType":"UserDefinedTypeName","pathNode":{"id":988,"name":"IWeightedLPOracle","nameLocations":["680:17:16"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"680:17:16"},"referencedDeclaration":952,"src":"680:17:16","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"visibility":"internal"}],"src":"679:26:16"},"scope":993,"src":"618:88:16","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":994,"src":"318:390:16","usedErrors":[],"usedEvents":[970]}],"src":"46:663:16"},"id":16},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[1009]},"id":1010,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":995,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":996,"nodeType":"StructuredDocumentation","src":"72:56:17","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":1009,"linearizedBaseContracts":[1009],"name":"IAuthorizer","nameLocation":"138:11:17","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":997,"nodeType":"StructuredDocumentation","src":"156:354:17","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":1008,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:17","nodeType":"FunctionDefinition","parameters":{"id":1004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":999,"mutability":"mutable","name":"actionId","nameLocation":"543:8:17","nodeType":"VariableDeclaration","scope":1008,"src":"535:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":998,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1001,"mutability":"mutable","name":"account","nameLocation":"561:7:17","nodeType":"VariableDeclaration","scope":1008,"src":"553:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1000,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1003,"mutability":"mutable","name":"where","nameLocation":"578:5:17","nodeType":"VariableDeclaration","scope":1008,"src":"570:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1002,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:17"},"returnParameters":{"id":1007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1006,"mutability":"mutable","name":"success","nameLocation":"613:7:17","nodeType":"VariableDeclaration","scope":1008,"src":"608:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1005,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:17"},"scope":1009,"src":"515:107:17","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1010,"src":"128:496:17","usedErrors":[],"usedEvents":[]}],"src":"46:579:17"},"id":17},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","exportedSymbols":{"IBasePool":[1059],"ISwapFeePercentageBounds":[2265],"IUnbalancedLiquidityInvariantRatioBounds":[2281],"PoolSwapParams":[3980],"Rounding":[3940],"SwapKind":[3943]},"id":1060,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1011,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","file":"./IUnbalancedLiquidityInvariantRatioBounds.sol","id":1013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1060,"sourceUnit":2282,"src":"72:106:18","symbolAliases":[{"foreign":{"id":1012,"name":"IUnbalancedLiquidityInvariantRatioBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2281,"src":"81:40:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"./ISwapFeePercentageBounds.sol","id":1015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1060,"sourceUnit":2266,"src":"179:74:18","symbolAliases":[{"foreign":{"id":1014,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2265,"src":"188:24:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1060,"sourceUnit":4080,"src":"254:70:18","symbolAliases":[{"foreign":{"id":1016,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"263:14:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1017,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"279:8:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1018,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"289:8:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1021,"name":"ISwapFeePercentageBounds","nameLocations":["733:24:18"],"nodeType":"IdentifierPath","referencedDeclaration":2265,"src":"733:24:18"},"id":1022,"nodeType":"InheritanceSpecifier","src":"733:24:18"},{"baseName":{"id":1023,"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocations":["759:40:18"],"nodeType":"IdentifierPath","referencedDeclaration":2281,"src":"759:40:18"},"id":1024,"nodeType":"InheritanceSpecifier","src":"759:40:18"}],"canonicalName":"IBasePool","contractDependencies":[],"contractKind":"interface","documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"326:383:18","text":" @notice Base interface for a Balancer Pool.\n @dev All pool types should implement this interface. Note that it also requires implementation of:\n - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n liquidity operation."},"fullyImplemented":false,"id":1059,"linearizedBaseContracts":[1059,2281,2265],"name":"IBasePool","nameLocation":"720:9:18","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1025,"nodeType":"StructuredDocumentation","src":"1014:1934:18","text":" @notice Computes the pool's invariant.\n @dev This function computes the invariant based on current balances (and potentially other pool state).\n The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n returned for both rounding directions.\n You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n effectively add liquidity after the swap - but it should never decrease.\n 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n the total value should not change.\n Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n the same total value would get a different number of LP shares. In that case, LP shares would not be\n interchangeable, as they must be in a fair DEX.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param rounding Rounding direction to consider when computing the invariant\n @return invariant The calculated invariant of the pool, represented as a uint256"},"functionSelector":"984de9e8","id":1036,"implemented":false,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"2962:16:18","nodeType":"FunctionDefinition","parameters":{"id":1032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3005:20:18","nodeType":"VariableDeclaration","scope":1036,"src":"2988:37:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1026,"name":"uint256","nodeType":"ElementaryTypeName","src":"2988:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1027,"nodeType":"ArrayTypeName","src":"2988:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1031,"mutability":"mutable","name":"rounding","nameLocation":"3044:8:18","nodeType":"VariableDeclaration","scope":1036,"src":"3035:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$3940","typeString":"enum Rounding"},"typeName":{"id":1030,"nodeType":"UserDefinedTypeName","pathNode":{"id":1029,"name":"Rounding","nameLocations":["3035:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":3940,"src":"3035:8:18"},"referencedDeclaration":3940,"src":"3035:8:18","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$3940","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"2978:80:18"},"returnParameters":{"id":1035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1034,"mutability":"mutable","name":"invariant","nameLocation":"3090:9:18","nodeType":"VariableDeclaration","scope":1036,"src":"3082:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1033,"name":"uint256","nodeType":"ElementaryTypeName","src":"3082:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3081:19:18"},"scope":1059,"src":"2953:148:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1037,"nodeType":"StructuredDocumentation","src":"3107:725:18","text":" @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n The pool must round up for the Vault to round in the protocol's favor when calling this function.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @return newBalance The new balance of the selected token, after the operation"},"functionSelector":"16a0b3e0","id":1049,"implemented":false,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"3846:14:18","nodeType":"FunctionDefinition","parameters":{"id":1045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1040,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3887:20:18","nodeType":"VariableDeclaration","scope":1049,"src":"3870:37:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1038,"name":"uint256","nodeType":"ElementaryTypeName","src":"3870:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1039,"nodeType":"ArrayTypeName","src":"3870:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1042,"mutability":"mutable","name":"tokenInIndex","nameLocation":"3925:12:18","nodeType":"VariableDeclaration","scope":1049,"src":"3917:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1041,"name":"uint256","nodeType":"ElementaryTypeName","src":"3917:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1044,"mutability":"mutable","name":"invariantRatio","nameLocation":"3955:14:18","nodeType":"VariableDeclaration","scope":1049,"src":"3947:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1043,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3860:115:18"},"returnParameters":{"id":1048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1047,"mutability":"mutable","name":"newBalance","nameLocation":"4007:10:18","nodeType":"VariableDeclaration","scope":1049,"src":"3999:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1046,"name":"uint256","nodeType":"ElementaryTypeName","src":"3999:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3998:20:18"},"scope":1059,"src":"3837:182:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1050,"nodeType":"StructuredDocumentation","src":"4233:206:18","text":" @notice Execute a swap in the pool.\n @param params Swap parameters (see above for struct definition)\n @return amountCalculatedScaled18 Calculated amount for the swap operation"},"functionSelector":"72c98186","id":1058,"implemented":false,"kind":"function","modifiers":[],"name":"onSwap","nameLocation":"4453:6:18","nodeType":"FunctionDefinition","parameters":{"id":1054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1053,"mutability":"mutable","name":"params","nameLocation":"4484:6:18","nodeType":"VariableDeclaration","scope":1058,"src":"4460:30:18","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1052,"nodeType":"UserDefinedTypeName","pathNode":{"id":1051,"name":"PoolSwapParams","nameLocations":["4460:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":3980,"src":"4460:14:18"},"referencedDeclaration":3980,"src":"4460:14:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"4459:32:18"},"returnParameters":{"id":1057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1056,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"4518:24:18","nodeType":"VariableDeclaration","scope":1058,"src":"4510:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1055,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:34:18"},"scope":1059,"src":"4444:100:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1060,"src":"710:3836:18","usedErrors":[],"usedEvents":[]}],"src":"46:4501:18"},"id":18},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","exportedSymbols":{"IAuthentication":[81],"IBasePoolFactory":[1133]},"id":1134,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1061,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":1063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1134,"sourceUnit":82,"src":"72:80:19","symbolAliases":[{"foreign":{"id":1062,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"81:15:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1065,"name":"IAuthentication","nameLocations":["454:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":81,"src":"454:15:19"},"id":1066,"nodeType":"InheritanceSpecifier","src":"454:15:19"}],"canonicalName":"IBasePoolFactory","contractDependencies":[],"contractKind":"interface","documentation":{"id":1064,"nodeType":"StructuredDocumentation","src":"154:269:19","text":" @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)."},"fullyImplemented":false,"id":1133,"linearizedBaseContracts":[1133,81],"name":"IBasePoolFactory","nameLocation":"434:16:19","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1067,"nodeType":"StructuredDocumentation","src":"476:94:19","text":" @notice A pool was deployed.\n @param pool The address of the new pool"},"eventSelector":"83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc","id":1071,"name":"PoolCreated","nameLocation":"581:11:19","nodeType":"EventDefinition","parameters":{"id":1070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1069,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"609:4:19","nodeType":"VariableDeclaration","scope":1071,"src":"593:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1068,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:22:19"},"src":"575:40:19"},{"anonymous":false,"documentation":{"id":1072,"nodeType":"StructuredDocumentation","src":"621:51:19","text":"@notice The factory was disabled by governance."},"eventSelector":"432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50","id":1074,"name":"FactoryDisabled","nameLocation":"683:15:19","nodeType":"EventDefinition","parameters":{"id":1073,"nodeType":"ParameterList","parameters":[],"src":"698:2:19"},"src":"677:24:19"},{"documentation":{"id":1075,"nodeType":"StructuredDocumentation","src":"707:67:19","text":"@notice Attempted pool creation after the factory was disabled."},"errorSelector":"75884cda","id":1077,"name":"Disabled","nameLocation":"785:8:19","nodeType":"ErrorDefinition","parameters":{"id":1076,"nodeType":"ParameterList","parameters":[],"src":"793:2:19"},"src":"779:17:19"},{"documentation":{"id":1078,"nodeType":"StructuredDocumentation","src":"802:67:19","text":"@notice A pool index is beyond the current bounds of the array."},"errorSelector":"4e23d035","id":1080,"name":"IndexOutOfBounds","nameLocation":"880:16:19","nodeType":"ErrorDefinition","parameters":{"id":1079,"nodeType":"ParameterList","parameters":[],"src":"896:2:19"},"src":"874:25:19"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"905:180:19","text":" @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory"},"functionSelector":"6634b753","id":1088,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"1099:17:19","nodeType":"FunctionDefinition","parameters":{"id":1084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1083,"mutability":"mutable","name":"pool","nameLocation":"1125:4:19","nodeType":"VariableDeclaration","scope":1088,"src":"1117:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1082,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1116:14:19"},"returnParameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1086,"mutability":"mutable","name":"success","nameLocation":"1159:7:19","nodeType":"VariableDeclaration","scope":1088,"src":"1154:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1085,"name":"bool","nodeType":"ElementaryTypeName","src":"1154:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1153:14:19"},"scope":1133,"src":"1090:78:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1089,"nodeType":"StructuredDocumentation","src":"1174:245:19","text":" @notice Return the total number of pools deployed by this factory.\n @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n @return poolCount The number of pools deployed by this factory"},"functionSelector":"8eec5d70","id":1094,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"1433:12:19","nodeType":"FunctionDefinition","parameters":{"id":1090,"nodeType":"ParameterList","parameters":[],"src":"1445:2:19"},"returnParameters":{"id":1093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1092,"mutability":"mutable","name":"poolCount","nameLocation":"1479:9:19","nodeType":"VariableDeclaration","scope":1094,"src":"1471:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1091,"name":"uint256","nodeType":"ElementaryTypeName","src":"1471:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1470:19:19"},"scope":1133,"src":"1424:66:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1095,"nodeType":"StructuredDocumentation","src":"1496:510:19","text":" @notice Return a subset of the list of pools deployed by this factory.\n @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n stop at the end and return fewer results than requested.\n @param start The index of the first pool to return\n @param count The maximum number of pools to return\n @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools"},"functionSelector":"53a72f7e","id":1105,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"2020:15:19","nodeType":"FunctionDefinition","parameters":{"id":1100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1097,"mutability":"mutable","name":"start","nameLocation":"2044:5:19","nodeType":"VariableDeclaration","scope":1105,"src":"2036:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1096,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1099,"mutability":"mutable","name":"count","nameLocation":"2059:5:19","nodeType":"VariableDeclaration","scope":1105,"src":"2051:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1098,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:30:19"},"returnParameters":{"id":1104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1103,"mutability":"mutable","name":"pools","nameLocation":"2106:5:19","nodeType":"VariableDeclaration","scope":1105,"src":"2089:22:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1101,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1102,"nodeType":"ArrayTypeName","src":"2089:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2088:24:19"},"scope":1133,"src":"2011:102:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1106,"nodeType":"StructuredDocumentation","src":"2119:150:19","text":" @notice Return the complete list of pools deployed by this factory.\n @return pools The list of pools deployed by this factory"},"functionSelector":"673a2a1f","id":1112,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2283:8:19","nodeType":"FunctionDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"2291:2:19"},"returnParameters":{"id":1111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1110,"mutability":"mutable","name":"pools","nameLocation":"2334:5:19","nodeType":"VariableDeclaration","scope":1112,"src":"2317:22:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1108,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1109,"nodeType":"ArrayTypeName","src":"2317:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2316:24:19"},"scope":1133,"src":"2274:67:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1113,"nodeType":"StructuredDocumentation","src":"2347:322:19","text":" @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param constructorArgs The arguments used to create the pool\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt"},"functionSelector":"44f6fec7","id":1122,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"2683:20:19","nodeType":"FunctionDefinition","parameters":{"id":1118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1115,"mutability":"mutable","name":"constructorArgs","nameLocation":"2726:15:19","nodeType":"VariableDeclaration","scope":1122,"src":"2713:28:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1114,"name":"bytes","nodeType":"ElementaryTypeName","src":"2713:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1117,"mutability":"mutable","name":"salt","nameLocation":"2759:4:19","nodeType":"VariableDeclaration","scope":1122,"src":"2751:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1116,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2703:66:19"},"returnParameters":{"id":1121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1120,"mutability":"mutable","name":"deploymentAddress","nameLocation":"2801:17:19","nodeType":"VariableDeclaration","scope":1122,"src":"2793:25:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1119,"name":"address","nodeType":"ElementaryTypeName","src":"2793:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2792:27:19"},"scope":1133,"src":"2674:146:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1123,"nodeType":"StructuredDocumentation","src":"2826:143:19","text":" @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled"},"functionSelector":"6c57f5a9","id":1128,"implemented":false,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"2983:10:19","nodeType":"FunctionDefinition","parameters":{"id":1124,"nodeType":"ParameterList","parameters":[],"src":"2993:2:19"},"returnParameters":{"id":1127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1126,"mutability":"mutable","name":"success","nameLocation":"3024:7:19","nodeType":"VariableDeclaration","scope":1128,"src":"3019:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1125,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3018:14:19"},"scope":1133,"src":"2974:59:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1129,"nodeType":"StructuredDocumentation","src":"3039:182:19","text":" @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled."},"functionSelector":"2f2770db","id":1132,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3235:7:19","nodeType":"FunctionDefinition","parameters":{"id":1130,"nodeType":"ParameterList","parameters":[],"src":"3242:2:19"},"returnParameters":{"id":1131,"nodeType":"ParameterList","parameters":[],"src":"3253:0:19"},"scope":1133,"src":"3226:28:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1134,"src":"424:2832:19","usedErrors":[72,1077,1080],"usedEvents":[1071,1074]}],"src":"46:3211:19"},"id":19},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[4015],"AfterSwapParams":[4009],"HookFlags":[3835],"IHooks":[1335],"LiquidityManagement":[3788],"PoolSwapParams":[3980],"RemoveLiquidityKind":[4036],"SwapKind":[3943],"TokenConfig":[3902]},"id":1336,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1135,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1144,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1336,"sourceUnit":4080,"src":"289:193:20","symbolAliases":[{"foreign":{"id":1136,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3902,"src":"302:11:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1137,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3788,"src":"319:19:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1138,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"344:14:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1139,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4009,"src":"364:15:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1140,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3835,"src":"385:9:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1141,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4015,"src":"400:16:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1142,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"422:19:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1143,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"447:8:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":1145,"nodeType":"StructuredDocumentation","src":"484:490:20","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":1335,"linearizedBaseContracts":[1335],"name":"IHooks","nameLocation":"985:6:20","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1146,"nodeType":"StructuredDocumentation","src":"1205:769:20","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":1162,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:20","nodeType":"FunctionDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1148,"mutability":"mutable","name":"factory","nameLocation":"2016:7:20","nodeType":"VariableDeclaration","scope":1162,"src":"2008:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1147,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1150,"mutability":"mutable","name":"pool","nameLocation":"2041:4:20","nodeType":"VariableDeclaration","scope":1162,"src":"2033:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1149,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1154,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:20","nodeType":"VariableDeclaration","scope":1162,"src":"2055:32:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$3902_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1152,"nodeType":"UserDefinedTypeName","pathNode":{"id":1151,"name":"TokenConfig","nameLocations":["2055:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":3902,"src":"2055:11:20"},"referencedDeclaration":3902,"src":"2055:11:20","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$3902_storage_ptr","typeString":"struct TokenConfig"}},"id":1153,"nodeType":"ArrayTypeName","src":"2055:13:20","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$3902_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1157,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:20","nodeType":"VariableDeclaration","scope":1162,"src":"2097:48:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1156,"nodeType":"UserDefinedTypeName","pathNode":{"id":1155,"name":"LiquidityManagement","nameLocations":["2097:19:20"],"nodeType":"IdentifierPath","referencedDeclaration":3788,"src":"2097:19:20"},"referencedDeclaration":3788,"src":"2097:19:20","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:20"},"returnParameters":{"id":1161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1160,"mutability":"mutable","name":"success","nameLocation":"2175:7:20","nodeType":"VariableDeclaration","scope":1162,"src":"2170:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1159,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:20"},"scope":1335,"src":"1979:205:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1163,"nodeType":"StructuredDocumentation","src":"2190:412:20","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":1169,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:20","nodeType":"FunctionDefinition","parameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"2628:2:20"},"returnParameters":{"id":1168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1167,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:20","nodeType":"VariableDeclaration","scope":1169,"src":"2654:26:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$3835_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":1166,"nodeType":"UserDefinedTypeName","pathNode":{"id":1165,"name":"HookFlags","nameLocations":["2654:9:20"],"nodeType":"IdentifierPath","referencedDeclaration":3835,"src":"2654:9:20"},"referencedDeclaration":3835,"src":"2654:9:20","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$3835_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:20"},"scope":1335,"src":"2607:75:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1170,"nodeType":"StructuredDocumentation","src":"2897:484:20","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":1180,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:20","nodeType":"FunctionDefinition","parameters":{"id":1176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:20","nodeType":"VariableDeclaration","scope":1180,"src":"3414:31:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1171,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1172,"nodeType":"ArrayTypeName","src":"3414:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1175,"mutability":"mutable","name":"userData","nameLocation":"3460:8:20","nodeType":"VariableDeclaration","scope":1180,"src":"3447:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1174,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:20"},"returnParameters":{"id":1179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1178,"mutability":"mutable","name":"success","nameLocation":"3493:7:20","nodeType":"VariableDeclaration","scope":1180,"src":"3488:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1177,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:20"},"scope":1335,"src":"3386:116:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1181,"nodeType":"StructuredDocumentation","src":"3508:563:20","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":1193,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:20","nodeType":"FunctionDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1184,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:20","nodeType":"VariableDeclaration","scope":1193,"src":"4112:31:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1182,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1183,"nodeType":"ArrayTypeName","src":"4112:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1186,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:20","nodeType":"VariableDeclaration","scope":1193,"src":"4153:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1185,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1188,"mutability":"mutable","name":"userData","nameLocation":"4196:8:20","nodeType":"VariableDeclaration","scope":1193,"src":"4183:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1187,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:20"},"returnParameters":{"id":1192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1191,"mutability":"mutable","name":"success","nameLocation":"4234:7:20","nodeType":"VariableDeclaration","scope":1193,"src":"4229:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1190,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:20"},"scope":1335,"src":"4076:167:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1194,"nodeType":"StructuredDocumentation","src":"4461:953:20","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":1216,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:20","nodeType":"FunctionDefinition","parameters":{"id":1212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1196,"mutability":"mutable","name":"router","nameLocation":"5466:6:20","nodeType":"VariableDeclaration","scope":1216,"src":"5458:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1195,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"pool","nameLocation":"5490:4:20","nodeType":"VariableDeclaration","scope":1216,"src":"5482:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1201,"mutability":"mutable","name":"kind","nameLocation":"5521:4:20","nodeType":"VariableDeclaration","scope":1216,"src":"5504:21:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"},"typeName":{"id":1200,"nodeType":"UserDefinedTypeName","pathNode":{"id":1199,"name":"AddLiquidityKind","nameLocations":["5504:16:20"],"nodeType":"IdentifierPath","referencedDeclaration":4015,"src":"5504:16:20"},"referencedDeclaration":4015,"src":"5504:16:20","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1204,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:20","nodeType":"VariableDeclaration","scope":1216,"src":"5535:37:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1202,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1203,"nodeType":"ArrayTypeName","src":"5535:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1206,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:20","nodeType":"VariableDeclaration","scope":1216,"src":"5582:23:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1205,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1209,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:20","nodeType":"VariableDeclaration","scope":1216,"src":"5615:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1207,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1208,"nodeType":"ArrayTypeName","src":"5615:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1211,"mutability":"mutable","name":"userData","nameLocation":"5671:8:20","nodeType":"VariableDeclaration","scope":1216,"src":"5658:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1210,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:20"},"returnParameters":{"id":1215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"success","nameLocation":"5709:7:20","nodeType":"VariableDeclaration","scope":1216,"src":"5704:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1213,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:20"},"scope":1335,"src":"5419:299:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1217,"nodeType":"StructuredDocumentation","src":"5724:1250:20","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":1245,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:20","nodeType":"FunctionDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1219,"mutability":"mutable","name":"router","nameLocation":"7025:6:20","nodeType":"VariableDeclaration","scope":1245,"src":"7017:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1218,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1221,"mutability":"mutable","name":"pool","nameLocation":"7049:4:20","nodeType":"VariableDeclaration","scope":1245,"src":"7041:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1220,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1224,"mutability":"mutable","name":"kind","nameLocation":"7080:4:20","nodeType":"VariableDeclaration","scope":1245,"src":"7063:21:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"},"typeName":{"id":1223,"nodeType":"UserDefinedTypeName","pathNode":{"id":1222,"name":"AddLiquidityKind","nameLocations":["7063:16:20"],"nodeType":"IdentifierPath","referencedDeclaration":4015,"src":"7063:16:20"},"referencedDeclaration":4015,"src":"7063:16:20","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1227,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:20","nodeType":"VariableDeclaration","scope":1245,"src":"7094:34:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1225,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1226,"nodeType":"ArrayTypeName","src":"7094:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1230,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:20","nodeType":"VariableDeclaration","scope":1245,"src":"7138:29:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1228,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1229,"nodeType":"ArrayTypeName","src":"7138:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1232,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:20","nodeType":"VariableDeclaration","scope":1245,"src":"7177:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1231,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1235,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:20","nodeType":"VariableDeclaration","scope":1245,"src":"7207:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1233,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1234,"nodeType":"ArrayTypeName","src":"7207:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1237,"mutability":"mutable","name":"userData","nameLocation":"7263:8:20","nodeType":"VariableDeclaration","scope":1245,"src":"7250:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1236,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:20"},"returnParameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1240,"mutability":"mutable","name":"success","nameLocation":"7301:7:20","nodeType":"VariableDeclaration","scope":1245,"src":"7296:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1239,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1243,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:20","nodeType":"VariableDeclaration","scope":1245,"src":"7310:41:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1241,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1242,"nodeType":"ArrayTypeName","src":"7310:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:20"},"scope":1335,"src":"6979:374:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1246,"nodeType":"StructuredDocumentation","src":"7572:992:20","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":1268,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:20","nodeType":"FunctionDefinition","parameters":{"id":1264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1248,"mutability":"mutable","name":"router","nameLocation":"8619:6:20","nodeType":"VariableDeclaration","scope":1268,"src":"8611:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1247,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1250,"mutability":"mutable","name":"pool","nameLocation":"8643:4:20","nodeType":"VariableDeclaration","scope":1268,"src":"8635:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1249,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1253,"mutability":"mutable","name":"kind","nameLocation":"8677:4:20","nodeType":"VariableDeclaration","scope":1268,"src":"8657:24:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1252,"nodeType":"UserDefinedTypeName","pathNode":{"id":1251,"name":"RemoveLiquidityKind","nameLocations":["8657:19:20"],"nodeType":"IdentifierPath","referencedDeclaration":4036,"src":"8657:19:20"},"referencedDeclaration":4036,"src":"8657:19:20","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1255,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:20","nodeType":"VariableDeclaration","scope":1268,"src":"8691:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1254,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1258,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:20","nodeType":"VariableDeclaration","scope":1268,"src":"8723:38:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1256,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1257,"nodeType":"ArrayTypeName","src":"8723:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1261,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:20","nodeType":"VariableDeclaration","scope":1268,"src":"8771:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1259,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1260,"nodeType":"ArrayTypeName","src":"8771:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1263,"mutability":"mutable","name":"userData","nameLocation":"8827:8:20","nodeType":"VariableDeclaration","scope":1268,"src":"8814:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1262,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:20"},"returnParameters":{"id":1267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1266,"mutability":"mutable","name":"success","nameLocation":"8865:7:20","nodeType":"VariableDeclaration","scope":1268,"src":"8860:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1265,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:20"},"scope":1335,"src":"8569:305:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"8880:1276:20","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":1297,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:20","nodeType":"FunctionDefinition","parameters":{"id":1290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1271,"mutability":"mutable","name":"router","nameLocation":"10210:6:20","nodeType":"VariableDeclaration","scope":1297,"src":"10202:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1270,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1273,"mutability":"mutable","name":"pool","nameLocation":"10234:4:20","nodeType":"VariableDeclaration","scope":1297,"src":"10226:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1272,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1276,"mutability":"mutable","name":"kind","nameLocation":"10268:4:20","nodeType":"VariableDeclaration","scope":1297,"src":"10248:24:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1275,"nodeType":"UserDefinedTypeName","pathNode":{"id":1274,"name":"RemoveLiquidityKind","nameLocations":["10248:19:20"],"nodeType":"IdentifierPath","referencedDeclaration":4036,"src":"10248:19:20"},"referencedDeclaration":4036,"src":"10248:19:20","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1278,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:20","nodeType":"VariableDeclaration","scope":1297,"src":"10282:19:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1277,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1281,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:20","nodeType":"VariableDeclaration","scope":1297,"src":"10311:35:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1279,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1280,"nodeType":"ArrayTypeName","src":"10311:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:20","nodeType":"VariableDeclaration","scope":1297,"src":"10356:30:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1282,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1283,"nodeType":"ArrayTypeName","src":"10356:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1287,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:20","nodeType":"VariableDeclaration","scope":1297,"src":"10396:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1285,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1286,"nodeType":"ArrayTypeName","src":"10396:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1289,"mutability":"mutable","name":"userData","nameLocation":"10452:8:20","nodeType":"VariableDeclaration","scope":1297,"src":"10439:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1288,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:20"},"returnParameters":{"id":1296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1292,"mutability":"mutable","name":"success","nameLocation":"10490:7:20","nodeType":"VariableDeclaration","scope":1297,"src":"10485:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1291,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1295,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:20","nodeType":"VariableDeclaration","scope":1297,"src":"10499:42:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1293,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1294,"nodeType":"ArrayTypeName","src":"10499:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:20"},"scope":1335,"src":"10161:382:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1298,"nodeType":"StructuredDocumentation","src":"10753:556:20","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":1308,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:20","nodeType":"FunctionDefinition","parameters":{"id":1304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1301,"mutability":"mutable","name":"params","nameLocation":"11360:6:20","nodeType":"VariableDeclaration","scope":1308,"src":"11336:30:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1300,"nodeType":"UserDefinedTypeName","pathNode":{"id":1299,"name":"PoolSwapParams","nameLocations":["11336:14:20"],"nodeType":"IdentifierPath","referencedDeclaration":3980,"src":"11336:14:20"},"referencedDeclaration":3980,"src":"11336:14:20","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1303,"mutability":"mutable","name":"pool","nameLocation":"11376:4:20","nodeType":"VariableDeclaration","scope":1308,"src":"11368:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1302,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:20"},"returnParameters":{"id":1307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1306,"mutability":"mutable","name":"success","nameLocation":"11405:7:20","nodeType":"VariableDeclaration","scope":1308,"src":"11400:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1305,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:20"},"scope":1335,"src":"11314:100:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1309,"nodeType":"StructuredDocumentation","src":"11420:671:20","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":1319,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:20","nodeType":"FunctionDefinition","parameters":{"id":1313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1312,"mutability":"mutable","name":"params","nameLocation":"12151:6:20","nodeType":"VariableDeclaration","scope":1319,"src":"12126:31:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4009_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":1311,"nodeType":"UserDefinedTypeName","pathNode":{"id":1310,"name":"AfterSwapParams","nameLocations":["12126:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4009,"src":"12126:15:20"},"referencedDeclaration":4009,"src":"12126:15:20","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4009_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:20"},"returnParameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"success","nameLocation":"12187:7:20","nodeType":"VariableDeclaration","scope":1319,"src":"12182:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1314,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1317,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:20","nodeType":"VariableDeclaration","scope":1319,"src":"12196:39:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1316,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:20"},"scope":1335,"src":"12096:141:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1320,"nodeType":"StructuredDocumentation","src":"12243:795:20","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":1334,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:20","nodeType":"FunctionDefinition","parameters":{"id":1328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1323,"mutability":"mutable","name":"params","nameLocation":"13119:6:20","nodeType":"VariableDeclaration","scope":1334,"src":"13095:30:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1322,"nodeType":"UserDefinedTypeName","pathNode":{"id":1321,"name":"PoolSwapParams","nameLocations":["13095:14:20"],"nodeType":"IdentifierPath","referencedDeclaration":3980,"src":"13095:14:20"},"referencedDeclaration":3980,"src":"13095:14:20","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1325,"mutability":"mutable","name":"pool","nameLocation":"13143:4:20","nodeType":"VariableDeclaration","scope":1334,"src":"13135:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1324,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1327,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:20","nodeType":"VariableDeclaration","scope":1334,"src":"13157:31:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1326,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:20"},"returnParameters":{"id":1333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1330,"mutability":"mutable","name":"success","nameLocation":"13223:7:20","nodeType":"VariableDeclaration","scope":1334,"src":"13218:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1329,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1332,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:20","nodeType":"VariableDeclaration","scope":1334,"src":"13232:32:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1331,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:20"},"scope":1335,"src":"13043:223:20","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1336,"src":"975:12293:20","usedErrors":[],"usedEvents":[]}],"src":"46:13223:20"},"id":20},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[9632],"IProtocolFeeController":[1673],"IVault":[2319]},"id":1674,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1337,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1674,"sourceUnit":9633,"src":"72:72:21","symbolAliases":[{"foreign":{"id":1338,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1674,"sourceUnit":2320,"src":"146:38:21","symbolAliases":[{"foreign":{"id":1340,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"155:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":1342,"nodeType":"StructuredDocumentation","src":"186:80:21","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":1673,"linearizedBaseContracts":[1673],"name":"IProtocolFeeController","nameLocation":"276:22:21","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1343,"nodeType":"StructuredDocumentation","src":"305:157:21","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":1347,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:21","nodeType":"EventDefinition","parameters":{"id":1346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1345,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:21","nodeType":"VariableDeclaration","scope":1347,"src":"512:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1344,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:21"},"src":"467:72:21"},{"anonymous":false,"documentation":{"id":1348,"nodeType":"StructuredDocumentation","src":"545:160:21","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":1352,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:21","nodeType":"EventDefinition","parameters":{"id":1351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1350,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:21","nodeType":"VariableDeclaration","scope":1352,"src":"756:26:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1349,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:21"},"src":"710:74:21"},{"anonymous":false,"documentation":{"id":1353,"nodeType":"StructuredDocumentation","src":"790:245:21","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":1359,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:21","nodeType":"EventDefinition","parameters":{"id":1358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1355,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:21","nodeType":"VariableDeclaration","scope":1359,"src":"1079:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1354,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1357,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:21","nodeType":"VariableDeclaration","scope":1359,"src":"1101:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1356,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:21"},"src":"1040:88:21"},{"anonymous":false,"documentation":{"id":1360,"nodeType":"StructuredDocumentation","src":"1134:249:21","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":1366,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:21","nodeType":"EventDefinition","parameters":{"id":1365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1362,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:21","nodeType":"VariableDeclaration","scope":1366,"src":"1428:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1361,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1364,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:21","nodeType":"VariableDeclaration","scope":1366,"src":"1450:26:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1363,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:21"},"src":"1388:90:21"},{"anonymous":false,"documentation":{"id":1367,"nodeType":"StructuredDocumentation","src":"1484:267:21","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":1373,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:21","nodeType":"EventDefinition","parameters":{"id":1372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1369,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:21","nodeType":"VariableDeclaration","scope":1373,"src":"1798:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1368,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1371,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:21","nodeType":"VariableDeclaration","scope":1373,"src":"1820:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1370,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:21"},"src":"1756:102:21"},{"anonymous":false,"documentation":{"id":1374,"nodeType":"StructuredDocumentation","src":"1864:271:21","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":1380,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:21","nodeType":"EventDefinition","parameters":{"id":1379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1376,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:21","nodeType":"VariableDeclaration","scope":1380,"src":"2183:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1375,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1378,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:21","nodeType":"VariableDeclaration","scope":1380,"src":"2205:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1377,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:21"},"src":"2140:104:21"},{"anonymous":false,"documentation":{"id":1381,"nodeType":"StructuredDocumentation","src":"2250:560:21","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":1390,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:21","nodeType":"EventDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1383,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:21","nodeType":"VariableDeclaration","scope":1390,"src":"2846:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1382,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1386,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:21","nodeType":"VariableDeclaration","scope":1390,"src":"2868:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1385,"nodeType":"UserDefinedTypeName","pathNode":{"id":1384,"name":"IERC20","nameLocations":["2868:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2868:6:21"},"referencedDeclaration":9632,"src":"2868:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1388,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:21","nodeType":"VariableDeclaration","scope":1390,"src":"2890:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1387,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:21"},"src":"2815:91:21"},{"anonymous":false,"documentation":{"id":1391,"nodeType":"StructuredDocumentation","src":"2912:564:21","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":1400,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:21","nodeType":"EventDefinition","parameters":{"id":1399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1393,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:21","nodeType":"VariableDeclaration","scope":1400,"src":"3513:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1392,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1396,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:21","nodeType":"VariableDeclaration","scope":1400,"src":"3535:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1395,"nodeType":"UserDefinedTypeName","pathNode":{"id":1394,"name":"IERC20","nameLocations":["3535:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3535:6:21"},"referencedDeclaration":9632,"src":"3535:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1398,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:21","nodeType":"VariableDeclaration","scope":1400,"src":"3557:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1397,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:21"},"src":"3481:92:21"},{"anonymous":false,"documentation":{"id":1401,"nodeType":"StructuredDocumentation","src":"3579:333:21","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":1412,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:21","nodeType":"EventDefinition","parameters":{"id":1411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1403,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:21","nodeType":"VariableDeclaration","scope":1412,"src":"3945:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1402,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1406,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:21","nodeType":"VariableDeclaration","scope":1412,"src":"3967:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1405,"nodeType":"UserDefinedTypeName","pathNode":{"id":1404,"name":"IERC20","nameLocations":["3967:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3967:6:21"},"referencedDeclaration":9632,"src":"3967:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1408,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:21","nodeType":"VariableDeclaration","scope":1412,"src":"3989:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1407,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1410,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:21","nodeType":"VariableDeclaration","scope":1412,"src":"4016:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1409,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:21"},"src":"3917:115:21"},{"anonymous":false,"documentation":{"id":1413,"nodeType":"StructuredDocumentation","src":"4038:398:21","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":1424,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:21","nodeType":"EventDefinition","parameters":{"id":1423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1415,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:21","nodeType":"VariableDeclaration","scope":1424,"src":"4481:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1414,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1418,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:21","nodeType":"VariableDeclaration","scope":1424,"src":"4511:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1417,"nodeType":"UserDefinedTypeName","pathNode":{"id":1416,"name":"IERC20","nameLocations":["4511:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4511:6:21"},"referencedDeclaration":9632,"src":"4511:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1420,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:21","nodeType":"VariableDeclaration","scope":1424,"src":"4541:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1419,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1422,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:21","nodeType":"VariableDeclaration","scope":1424,"src":"4576:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1421,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:21"},"src":"4441:156:21"},{"anonymous":false,"documentation":{"id":1425,"nodeType":"StructuredDocumentation","src":"4603:529:21","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":1433,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:21","nodeType":"EventDefinition","parameters":{"id":1432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1427,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:21","nodeType":"VariableDeclaration","scope":1433,"src":"5190:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1426,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1429,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:21","nodeType":"VariableDeclaration","scope":1433,"src":"5220:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1428,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1431,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:21","nodeType":"VariableDeclaration","scope":1433,"src":"5264:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1430,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:21"},"src":"5137:158:21"},{"anonymous":false,"documentation":{"id":1434,"nodeType":"StructuredDocumentation","src":"5301:533:21","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":1442,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:21","nodeType":"EventDefinition","parameters":{"id":1441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1436,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:21","nodeType":"VariableDeclaration","scope":1442,"src":"5893:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1435,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1438,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:21","nodeType":"VariableDeclaration","scope":1442,"src":"5923:35:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1437,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1440,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:21","nodeType":"VariableDeclaration","scope":1442,"src":"5968:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1439,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:21"},"src":"5839:160:21"},{"anonymous":false,"documentation":{"id":1443,"nodeType":"StructuredDocumentation","src":"6005:738:21","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":1451,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:21","nodeType":"EventDefinition","parameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1445,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:21","nodeType":"VariableDeclaration","scope":1451,"src":"6786:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1444,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1447,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:21","nodeType":"VariableDeclaration","scope":1451,"src":"6808:27:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1446,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1449,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:21","nodeType":"VariableDeclaration","scope":1451,"src":"6837:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1448,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:21"},"src":"6748:113:21"},{"documentation":{"id":1452,"nodeType":"StructuredDocumentation","src":"6867:219:21","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":1454,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:21","nodeType":"ErrorDefinition","parameters":{"id":1453,"nodeType":"ParameterList","parameters":[],"src":"7129:2:21"},"src":"7091:41:21"},{"documentation":{"id":1455,"nodeType":"StructuredDocumentation","src":"7138:221:21","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":1457,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:21","nodeType":"ErrorDefinition","parameters":{"id":1456,"nodeType":"ParameterList","parameters":[],"src":"7403:2:21"},"src":"7364:42:21"},{"documentation":{"id":1458,"nodeType":"StructuredDocumentation","src":"7412:156:21","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":1462,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:21","nodeType":"ErrorDefinition","parameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1460,"mutability":"mutable","name":"pool","nameLocation":"7612:4:21","nodeType":"VariableDeclaration","scope":1462,"src":"7604:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1459,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:21"},"src":"7573:45:21"},{"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"7624:236:21","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":1469,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:21","nodeType":"ErrorDefinition","parameters":{"id":1468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1465,"mutability":"mutable","name":"caller","nameLocation":"7902:6:21","nodeType":"VariableDeclaration","scope":1469,"src":"7894:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1464,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1467,"mutability":"mutable","name":"pool","nameLocation":"7918:4:21","nodeType":"VariableDeclaration","scope":1469,"src":"7910:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1466,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:21"},"src":"7865:59:21"},{"documentation":{"id":1470,"nodeType":"StructuredDocumentation","src":"7930:110:21","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":1472,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:21","nodeType":"ErrorDefinition","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[],"src":"8082:2:21"},"src":"8045:40:21"},{"documentation":{"id":1473,"nodeType":"StructuredDocumentation","src":"8091:109:21","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":1479,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:21","nodeType":"FunctionDefinition","parameters":{"id":1474,"nodeType":"ParameterList","parameters":[],"src":"8219:2:21"},"returnParameters":{"id":1478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1477,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1479,"src":"8245:6:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":1476,"nodeType":"UserDefinedTypeName","pathNode":{"id":1475,"name":"IVault","nameLocations":["8245:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"8245:6:21"},"referencedDeclaration":2319,"src":"8245:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:21"},"scope":1673,"src":"8205:48:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1480,"nodeType":"StructuredDocumentation","src":"8259:131:21","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":1485,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:21","nodeType":"FunctionDefinition","parameters":{"id":1483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1482,"mutability":"mutable","name":"pool","nameLocation":"8433:4:21","nodeType":"VariableDeclaration","scope":1485,"src":"8425:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1481,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:21"},"returnParameters":{"id":1484,"nodeType":"ParameterList","parameters":[],"src":"8447:0:21"},"scope":1673,"src":"8395:53:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1486,"nodeType":"StructuredDocumentation","src":"8454:156:21","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":1491,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:21","nodeType":"FunctionDefinition","parameters":{"id":1487,"nodeType":"ParameterList","parameters":[],"src":"8658:2:21"},"returnParameters":{"id":1490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1489,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:21","nodeType":"VariableDeclaration","scope":1491,"src":"8684:33:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1488,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:21"},"scope":1673,"src":"8615:104:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1492,"nodeType":"StructuredDocumentation","src":"8725:159:21","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":1497,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:21","nodeType":"FunctionDefinition","parameters":{"id":1493,"nodeType":"ParameterList","parameters":[],"src":"8933:2:21"},"returnParameters":{"id":1496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1495,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:21","nodeType":"VariableDeclaration","scope":1497,"src":"8959:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1494,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:21"},"scope":1673,"src":"8889:106:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1498,"nodeType":"StructuredDocumentation","src":"9001:207:21","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":1505,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:21","nodeType":"FunctionDefinition","parameters":{"id":1501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1500,"mutability":"mutable","name":"pool","nameLocation":"9247:4:21","nodeType":"VariableDeclaration","scope":1505,"src":"9239:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1499,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:21"},"returnParameters":{"id":1504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1505,"src":"9276:4:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1502,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:21"},"scope":1673,"src":"9213:69:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1506,"nodeType":"StructuredDocumentation","src":"9288:292:21","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":1515,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:21","nodeType":"FunctionDefinition","parameters":{"id":1509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1508,"mutability":"mutable","name":"pool","nameLocation":"9638:4:21","nodeType":"VariableDeclaration","scope":1515,"src":"9630:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1507,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:21"},"returnParameters":{"id":1514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1511,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:21","nodeType":"VariableDeclaration","scope":1515,"src":"9672:33:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1510,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1513,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:21","nodeType":"VariableDeclaration","scope":1515,"src":"9707:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1512,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:21"},"scope":1673,"src":"9585:139:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1516,"nodeType":"StructuredDocumentation","src":"9730:295:21","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":1525,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:21","nodeType":"FunctionDefinition","parameters":{"id":1519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1518,"mutability":"mutable","name":"pool","nameLocation":"10084:4:21","nodeType":"VariableDeclaration","scope":1525,"src":"10076:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1517,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:21"},"returnParameters":{"id":1524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1521,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:21","nodeType":"VariableDeclaration","scope":1525,"src":"10118:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1520,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1523,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:21","nodeType":"VariableDeclaration","scope":1525,"src":"10154:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1522,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:21"},"scope":1673,"src":"10030:141:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1526,"nodeType":"StructuredDocumentation","src":"10177:249:21","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":1533,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:21","nodeType":"FunctionDefinition","parameters":{"id":1529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1528,"mutability":"mutable","name":"pool","nameLocation":"10480:4:21","nodeType":"VariableDeclaration","scope":1533,"src":"10472:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1527,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:21"},"returnParameters":{"id":1532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1533,"src":"10509:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1530,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:21"},"scope":1673,"src":"10431:87:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1534,"nodeType":"StructuredDocumentation","src":"10524:252:21","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":1541,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:21","nodeType":"FunctionDefinition","parameters":{"id":1537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1536,"mutability":"mutable","name":"pool","nameLocation":"10831:4:21","nodeType":"VariableDeclaration","scope":1541,"src":"10823:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1535,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:21"},"returnParameters":{"id":1540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1541,"src":"10860:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:21"},"scope":1673,"src":"10781:88:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1542,"nodeType":"StructuredDocumentation","src":"10875:344:21","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":1550,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:21","nodeType":"FunctionDefinition","parameters":{"id":1545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1544,"mutability":"mutable","name":"pool","nameLocation":"11263:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"11255:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1543,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:21"},"returnParameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:21","nodeType":"VariableDeclaration","scope":1550,"src":"11292:27:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1546,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1547,"nodeType":"ArrayTypeName","src":"11292:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:21"},"scope":1673,"src":"11224:97:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"11327:348:21","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":1559,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:21","nodeType":"FunctionDefinition","parameters":{"id":1554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1553,"mutability":"mutable","name":"pool","nameLocation":"11722:4:21","nodeType":"VariableDeclaration","scope":1559,"src":"11714:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1552,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:21"},"returnParameters":{"id":1558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1557,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:21","nodeType":"VariableDeclaration","scope":1559,"src":"11751:27:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1555,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1556,"nodeType":"ArrayTypeName","src":"11751:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:21"},"scope":1673,"src":"11680:100:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1560,"nodeType":"StructuredDocumentation","src":"11786:1445:21","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":1569,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:21","nodeType":"FunctionDefinition","parameters":{"id":1565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1562,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:21","nodeType":"VariableDeclaration","scope":1569,"src":"13284:29:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1561,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1564,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:21","nodeType":"VariableDeclaration","scope":1569,"src":"13323:32:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1563,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:21"},"returnParameters":{"id":1568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1567,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:21","nodeType":"VariableDeclaration","scope":1569,"src":"13385:30:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1566,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:21"},"scope":1673,"src":"13236:181:21","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1570,"nodeType":"StructuredDocumentation","src":"13423:398:21","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":1575,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:21","nodeType":"FunctionDefinition","parameters":{"id":1573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1572,"mutability":"mutable","name":"pool","nameLocation":"13875:4:21","nodeType":"VariableDeclaration","scope":1575,"src":"13867:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1571,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:21"},"returnParameters":{"id":1574,"nodeType":"ParameterList","parameters":[],"src":"13889:0:21"},"scope":1673,"src":"13826:64:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1576,"nodeType":"StructuredDocumentation","src":"13896:400:21","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":1581,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:21","nodeType":"FunctionDefinition","parameters":{"id":1579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1578,"mutability":"mutable","name":"pool","nameLocation":"14351:4:21","nodeType":"VariableDeclaration","scope":1581,"src":"14343:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1577,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:21"},"returnParameters":{"id":1580,"nodeType":"ParameterList","parameters":[],"src":"14365:0:21"},"scope":1673,"src":"14301:65:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1582,"nodeType":"StructuredDocumentation","src":"14590:826:21","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":1595,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:21","nodeType":"FunctionDefinition","parameters":{"id":1589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"mutability":"mutable","name":"pool","nameLocation":"15460:4:21","nodeType":"VariableDeclaration","scope":1595,"src":"15452:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1583,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1586,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:21","nodeType":"VariableDeclaration","scope":1595,"src":"15474:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1585,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1588,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:21","nodeType":"VariableDeclaration","scope":1595,"src":"15503:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1587,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:21"},"returnParameters":{"id":1594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1591,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:21","nodeType":"VariableDeclaration","scope":1595,"src":"15550:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1590,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1593,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:21","nodeType":"VariableDeclaration","scope":1595,"src":"15586:35:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1592,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:21"},"scope":1673,"src":"15421:202:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1596,"nodeType":"StructuredDocumentation","src":"15629:175:21","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":1601,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:21","nodeType":"FunctionDefinition","parameters":{"id":1599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1598,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:21","nodeType":"VariableDeclaration","scope":1601,"src":"15853:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1597,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:21"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[],"src":"15899:0:21"},"scope":1673,"src":"15809:91:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1602,"nodeType":"StructuredDocumentation","src":"15906:178:21","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":1607,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:21","nodeType":"FunctionDefinition","parameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:21","nodeType":"VariableDeclaration","scope":1607,"src":"16134:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:21"},"returnParameters":{"id":1606,"nodeType":"ParameterList","parameters":[],"src":"16181:0:21"},"scope":1673,"src":"16089:93:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1608,"nodeType":"StructuredDocumentation","src":"16188:272:21","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":1615,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:21","nodeType":"FunctionDefinition","parameters":{"id":1613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1610,"mutability":"mutable","name":"pool","nameLocation":"16511:4:21","nodeType":"VariableDeclaration","scope":1615,"src":"16503:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1609,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1612,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:21","nodeType":"VariableDeclaration","scope":1615,"src":"16517:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1611,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:21"},"returnParameters":{"id":1614,"nodeType":"ParameterList","parameters":[],"src":"16563:0:21"},"scope":1673,"src":"16465:99:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1616,"nodeType":"StructuredDocumentation","src":"16570:276:21","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":1623,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:21","nodeType":"FunctionDefinition","parameters":{"id":1621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1618,"mutability":"mutable","name":"pool","nameLocation":"16898:4:21","nodeType":"VariableDeclaration","scope":1623,"src":"16890:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1617,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1620,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:21","nodeType":"VariableDeclaration","scope":1623,"src":"16904:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1619,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:21"},"returnParameters":{"id":1622,"nodeType":"ParameterList","parameters":[],"src":"16951:0:21"},"scope":1673,"src":"16851:101:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1624,"nodeType":"StructuredDocumentation","src":"16958:623:21","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":1631,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:21","nodeType":"FunctionDefinition","parameters":{"id":1629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1626,"mutability":"mutable","name":"pool","nameLocation":"17635:4:21","nodeType":"VariableDeclaration","scope":1631,"src":"17627:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1625,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1628,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:21","nodeType":"VariableDeclaration","scope":1631,"src":"17641:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1627,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:21"},"returnParameters":{"id":1630,"nodeType":"ParameterList","parameters":[],"src":"17687:0:21"},"scope":1673,"src":"17586:102:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1632,"nodeType":"StructuredDocumentation","src":"17694:626:21","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":1639,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:21","nodeType":"FunctionDefinition","parameters":{"id":1637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1634,"mutability":"mutable","name":"pool","nameLocation":"18375:4:21","nodeType":"VariableDeclaration","scope":1639,"src":"18367:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1633,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1636,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:21","nodeType":"VariableDeclaration","scope":1639,"src":"18381:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1635,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:21"},"returnParameters":{"id":1638,"nodeType":"ParameterList","parameters":[],"src":"18428:0:21"},"scope":1673,"src":"18325:104:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1640,"nodeType":"StructuredDocumentation","src":"18435:296:21","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":1647,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:21","nodeType":"FunctionDefinition","parameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1642,"mutability":"mutable","name":"pool","nameLocation":"18774:4:21","nodeType":"VariableDeclaration","scope":1647,"src":"18766:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1641,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1644,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:21","nodeType":"VariableDeclaration","scope":1647,"src":"18780:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1643,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:21"},"returnParameters":{"id":1646,"nodeType":"ParameterList","parameters":[],"src":"18807:0:21"},"scope":1673,"src":"18736:72:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1648,"nodeType":"StructuredDocumentation","src":"18814:339:21","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":1658,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:21","nodeType":"FunctionDefinition","parameters":{"id":1656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1650,"mutability":"mutable","name":"pool","nameLocation":"19204:4:21","nodeType":"VariableDeclaration","scope":1658,"src":"19196:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1649,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1652,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:21","nodeType":"VariableDeclaration","scope":1658,"src":"19210:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1651,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"token","nameLocation":"19236:5:21","nodeType":"VariableDeclaration","scope":1658,"src":"19229:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1654,"nodeType":"UserDefinedTypeName","pathNode":{"id":1653,"name":"IERC20","nameLocations":["19229:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"19229:6:21"},"referencedDeclaration":9632,"src":"19229:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:21"},"returnParameters":{"id":1657,"nodeType":"ParameterList","parameters":[],"src":"19251:0:21"},"scope":1673,"src":"19158:94:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1659,"nodeType":"StructuredDocumentation","src":"19258:291:21","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":1666,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:21","nodeType":"FunctionDefinition","parameters":{"id":1664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1661,"mutability":"mutable","name":"pool","nameLocation":"19595:4:21","nodeType":"VariableDeclaration","scope":1666,"src":"19587:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1660,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1663,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:21","nodeType":"VariableDeclaration","scope":1666,"src":"19601:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1662,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:21"},"returnParameters":{"id":1665,"nodeType":"ParameterList","parameters":[],"src":"19628:0:21"},"scope":1673,"src":"19554:75:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1667,"nodeType":"StructuredDocumentation","src":"19635:310:21","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":1672,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:21","nodeType":"FunctionDefinition","parameters":{"id":1670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1669,"mutability":"mutable","name":"pool","nameLocation":"19991:4:21","nodeType":"VariableDeclaration","scope":1672,"src":"19983:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1668,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:21"},"returnParameters":{"id":1671,"nodeType":"ParameterList","parameters":[],"src":"20005:0:21"},"scope":1673,"src":"19950:56:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1674,"src":"266:19742:21","usedErrors":[1454,1457,1462,1469,1472],"usedEvents":[1347,1352,1359,1366,1373,1380,1390,1400,1412,1424,1433,1442,1451]}],"src":"46:19963:21"},"id":21},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","exportedSymbols":{"IBalancerContractRegistry":[279],"IProtocolFeeController":[1673],"IProtocolFeePercentagesProvider":[1752]},"id":1753,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1675,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"../standalone-utils/IBalancerContractRegistry.sol","id":1677,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1753,"sourceUnit":280,"src":"72:94:22","symbolAliases":[{"foreign":{"id":1676,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":279,"src":"81:25:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1679,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1753,"sourceUnit":1674,"src":"167:70:22","symbolAliases":[{"foreign":{"id":1678,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"176:22:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1752,"linearizedBaseContracts":[1752],"name":"IProtocolFeePercentagesProvider","nameLocation":"249:31:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1680,"nodeType":"StructuredDocumentation","src":"287:349:22","text":" @notice Protocol fee percentages have been set for the given factory.\n @param factory The pool factory\n @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory"},"eventSelector":"2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f0","id":1688,"name":"FactorySpecificProtocolFeePercentagesSet","nameLocation":"647:40:22","nodeType":"EventDefinition","parameters":{"id":1687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1682,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"713:7:22","nodeType":"VariableDeclaration","scope":1688,"src":"697:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1681,"name":"address","nodeType":"ElementaryTypeName","src":"697:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1684,"indexed":false,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"738:25:22","nodeType":"VariableDeclaration","scope":1688,"src":"730:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1683,"name":"uint256","nodeType":"ElementaryTypeName","src":"730:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1686,"indexed":false,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"781:26:22","nodeType":"VariableDeclaration","scope":1688,"src":"773:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1685,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"687:126:22"},"src":"641:173:22"},{"documentation":{"id":1689,"nodeType":"StructuredDocumentation","src":"820:87:22","text":"@notice The protocol fee controller was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1691,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"918:36:22","nodeType":"ErrorDefinition","parameters":{"id":1690,"nodeType":"ParameterList","parameters":[],"src":"954:2:22"},"src":"912:45:22"},{"documentation":{"id":1692,"nodeType":"StructuredDocumentation","src":"963:182:22","text":" @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n @param factory The address of the unknown factory"},"errorSelector":"c2a47384","id":1696,"name":"UnknownFactory","nameLocation":"1156:14:22","nodeType":"ErrorDefinition","parameters":{"id":1695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1694,"mutability":"mutable","name":"factory","nameLocation":"1179:7:22","nodeType":"VariableDeclaration","scope":1696,"src":"1171:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1693,"name":"address","nodeType":"ElementaryTypeName","src":"1171:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1170:17:22"},"src":"1150:38:22"},{"documentation":{"id":1697,"nodeType":"StructuredDocumentation","src":"1194:475:22","text":" @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n You need to set the factory fees before you can apply them to pools from that factory.\n @param factory The factory address where fees have not been set"},"errorSelector":"a589c09e","id":1701,"name":"FactoryFeesNotSet","nameLocation":"1680:17:22","nodeType":"ErrorDefinition","parameters":{"id":1700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1699,"mutability":"mutable","name":"factory","nameLocation":"1706:7:22","nodeType":"VariableDeclaration","scope":1701,"src":"1698:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1698,"name":"address","nodeType":"ElementaryTypeName","src":"1698:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1697:17:22"},"src":"1674:41:22"},{"documentation":{"id":1702,"nodeType":"StructuredDocumentation","src":"1721:300:22","text":" @notice The given pool is not from the expected factory.\n @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n @param pool The address of the unrecognized pool\n @param factory The address of the factory"},"errorSelector":"f400ce63","id":1708,"name":"PoolNotFromFactory","nameLocation":"2032:18:22","nodeType":"ErrorDefinition","parameters":{"id":1707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"pool","nameLocation":"2059:4:22","nodeType":"VariableDeclaration","scope":1708,"src":"2051:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1703,"name":"address","nodeType":"ElementaryTypeName","src":"2051:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1706,"mutability":"mutable","name":"factory","nameLocation":"2073:7:22","nodeType":"VariableDeclaration","scope":1708,"src":"2065:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1705,"name":"address","nodeType":"ElementaryTypeName","src":"2065:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2050:31:22"},"src":"2026:56:22"},{"documentation":{"id":1709,"nodeType":"StructuredDocumentation","src":"2088:162:22","text":" @notice Get the address of the `ProtocolFeeController` used to set fees.\n @return protocolFeeController The address of the fee controller"},"functionSelector":"85f2dbd4","id":1715,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"2264:24:22","nodeType":"FunctionDefinition","parameters":{"id":1710,"nodeType":"ParameterList","parameters":[],"src":"2288:2:22"},"returnParameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1713,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2337:21:22","nodeType":"VariableDeclaration","scope":1715,"src":"2314:44:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":1712,"nodeType":"UserDefinedTypeName","pathNode":{"id":1711,"name":"IProtocolFeeController","nameLocations":["2314:22:22"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"2314:22:22"},"referencedDeclaration":1673,"src":"2314:22:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2313:46:22"},"scope":1752,"src":"2255:105:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1716,"nodeType":"StructuredDocumentation","src":"2366:198:22","text":" @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n @return balancerContractRegistry The address of the Balancer contract registry"},"functionSelector":"deb27a7a","id":1722,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"2578:27:22","nodeType":"FunctionDefinition","parameters":{"id":1717,"nodeType":"ParameterList","parameters":[],"src":"2605:2:22"},"returnParameters":{"id":1721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1720,"mutability":"mutable","name":"balancerContractRegistry","nameLocation":"2657:24:22","nodeType":"VariableDeclaration","scope":1722,"src":"2631:50:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":1719,"nodeType":"UserDefinedTypeName","pathNode":{"id":1718,"name":"IBalancerContractRegistry","nameLocations":["2631:25:22"],"nodeType":"IdentifierPath","referencedDeclaration":279,"src":"2631:25:22"},"referencedDeclaration":279,"src":"2631:25:22","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2630:52:22"},"scope":1752,"src":"2569:114:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1723,"nodeType":"StructuredDocumentation","src":"2689:323:22","text":" @notice Query the protocol fee percentages for a given factory.\n @param factory The address of the factory\n @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory"},"functionSelector":"f2c24ec8","id":1732,"implemented":false,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3026:40:22","nodeType":"FunctionDefinition","parameters":{"id":1726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1725,"mutability":"mutable","name":"factory","nameLocation":"3084:7:22","nodeType":"VariableDeclaration","scope":1732,"src":"3076:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1724,"name":"address","nodeType":"ElementaryTypeName","src":"3076:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3066:31:22"},"returnParameters":{"id":1731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1728,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3129:25:22","nodeType":"VariableDeclaration","scope":1732,"src":"3121:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1727,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1730,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3164:26:22","nodeType":"VariableDeclaration","scope":1732,"src":"3156:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1729,"name":"uint256","nodeType":"ElementaryTypeName","src":"3156:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3120:71:22"},"scope":1752,"src":"3017:175:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1733,"nodeType":"StructuredDocumentation","src":"3198:600:22","text":" @notice Assign intended protocol fee percentages for a given factory.\n @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n to update the fee percentages on a set of pools from that factory.\n @param factory The address of the factory\n @param protocolSwapFeePercentage The new protocol swap fee percentage\n @param protocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"00859689","id":1742,"implemented":false,"kind":"function","modifiers":[],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3812:40:22","nodeType":"FunctionDefinition","parameters":{"id":1740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1735,"mutability":"mutable","name":"factory","nameLocation":"3870:7:22","nodeType":"VariableDeclaration","scope":1742,"src":"3862:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1734,"name":"address","nodeType":"ElementaryTypeName","src":"3862:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1737,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3895:25:22","nodeType":"VariableDeclaration","scope":1742,"src":"3887:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3887:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1739,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3938:26:22","nodeType":"VariableDeclaration","scope":1742,"src":"3930:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1738,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:118:22"},"returnParameters":{"id":1741,"nodeType":"ParameterList","parameters":[],"src":"3979:0:22"},"scope":1752,"src":"3803:177:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1743,"nodeType":"StructuredDocumentation","src":"3986:480:22","text":" @notice Update the protocol fees for a set of pools from a given factory.\n @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n @param factory The address of the factory\n @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`"},"functionSelector":"344b12d5","id":1751,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"4480:33:22","nodeType":"FunctionDefinition","parameters":{"id":1749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1745,"mutability":"mutable","name":"factory","nameLocation":"4522:7:22","nodeType":"VariableDeclaration","scope":1751,"src":"4514:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1744,"name":"address","nodeType":"ElementaryTypeName","src":"4514:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1748,"mutability":"mutable","name":"pools","nameLocation":"4548:5:22","nodeType":"VariableDeclaration","scope":1751,"src":"4531:22:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1747,"nodeType":"ArrayTypeName","src":"4531:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4513:41:22"},"returnParameters":{"id":1750,"nodeType":"ParameterList","parameters":[],"src":"4563:0:22"},"scope":1752,"src":"4471:93:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1753,"src":"239:4327:22","usedErrors":[1691,1696,1701,1708],"usedEvents":[1688]}],"src":"46:4521:22"},"id":22},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","exportedSymbols":{"AddLiquidityKind":[4015],"IERC20":[9632],"IERC4626":[8902],"IRouter":[2249],"RemoveLiquidityKind":[4036],"SwapKind":[3943]},"id":2250,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1754,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1756,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2250,"sourceUnit":8903,"src":"72:75:23","symbolAliases":[{"foreign":{"id":1755,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"81:8:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1758,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2250,"sourceUnit":9633,"src":"148:72:23","symbolAliases":[{"foreign":{"id":1757,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"157:6:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1762,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2250,"sourceUnit":4080,"src":"222:83:23","symbolAliases":[{"foreign":{"id":1759,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4015,"src":"231:16:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1760,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4036,"src":"249:19:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1761,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"270:8:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":1763,"nodeType":"StructuredDocumentation","src":"307:115:23","text":"@notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2249,"linearizedBaseContracts":[2249],"name":"IRouter","nameLocation":"432:7:23","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IRouter.InitializeHookParams","documentation":{"id":1764,"nodeType":"StructuredDocumentation","src":"661:637:23","text":" @notice Data for the pool initialization hook.\n @param sender Account originating the pool initialization operation\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity"},"id":1782,"members":[{"constant":false,"id":1766,"mutability":"mutable","name":"sender","nameLocation":"1349:6:23","nodeType":"VariableDeclaration","scope":1782,"src":"1341:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1765,"name":"address","nodeType":"ElementaryTypeName","src":"1341:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1768,"mutability":"mutable","name":"pool","nameLocation":"1373:4:23","nodeType":"VariableDeclaration","scope":1782,"src":"1365:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1767,"name":"address","nodeType":"ElementaryTypeName","src":"1365:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1772,"mutability":"mutable","name":"tokens","nameLocation":"1396:6:23","nodeType":"VariableDeclaration","scope":1782,"src":"1387:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1770,"nodeType":"UserDefinedTypeName","pathNode":{"id":1769,"name":"IERC20","nameLocations":["1387:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1387:6:23"},"referencedDeclaration":9632,"src":"1387:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":1771,"nodeType":"ArrayTypeName","src":"1387:8:23","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1775,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1422:14:23","nodeType":"VariableDeclaration","scope":1782,"src":"1412:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1773,"name":"uint256","nodeType":"ElementaryTypeName","src":"1412:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1774,"nodeType":"ArrayTypeName","src":"1412:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1777,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1454:15:23","nodeType":"VariableDeclaration","scope":1782,"src":"1446:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"1446:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1779,"mutability":"mutable","name":"wethIsEth","nameLocation":"1484:9:23","nodeType":"VariableDeclaration","scope":1782,"src":"1479:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1778,"name":"bool","nodeType":"ElementaryTypeName","src":"1479:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1781,"mutability":"mutable","name":"userData","nameLocation":"1509:8:23","nodeType":"VariableDeclaration","scope":1782,"src":"1503:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1780,"name":"bytes","nodeType":"ElementaryTypeName","src":"1503:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"InitializeHookParams","nameLocation":"1310:20:23","nodeType":"StructDefinition","scope":2249,"src":"1303:221:23","visibility":"public"},{"documentation":{"id":1783,"nodeType":"StructuredDocumentation","src":"1530:650:23","text":" @notice Initialize a liquidity pool.\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity\n @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity"},"functionSelector":"026b3d95","id":1803,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"2194:10:23","nodeType":"FunctionDefinition","parameters":{"id":1799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"pool","nameLocation":"2222:4:23","nodeType":"VariableDeclaration","scope":1803,"src":"2214:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1784,"name":"address","nodeType":"ElementaryTypeName","src":"2214:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1789,"mutability":"mutable","name":"tokens","nameLocation":"2252:6:23","nodeType":"VariableDeclaration","scope":1803,"src":"2236:22:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1787,"nodeType":"UserDefinedTypeName","pathNode":{"id":1786,"name":"IERC20","nameLocations":["2236:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2236:6:23"},"referencedDeclaration":9632,"src":"2236:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":1788,"nodeType":"ArrayTypeName","src":"2236:8:23","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1792,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2285:14:23","nodeType":"VariableDeclaration","scope":1803,"src":"2268:31:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1790,"name":"uint256","nodeType":"ElementaryTypeName","src":"2268:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1791,"nodeType":"ArrayTypeName","src":"2268:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1794,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"2317:15:23","nodeType":"VariableDeclaration","scope":1803,"src":"2309:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1793,"name":"uint256","nodeType":"ElementaryTypeName","src":"2309:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1796,"mutability":"mutable","name":"wethIsEth","nameLocation":"2347:9:23","nodeType":"VariableDeclaration","scope":1803,"src":"2342:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1795,"name":"bool","nodeType":"ElementaryTypeName","src":"2342:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1798,"mutability":"mutable","name":"userData","nameLocation":"2379:8:23","nodeType":"VariableDeclaration","scope":1803,"src":"2366:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1797,"name":"bytes","nodeType":"ElementaryTypeName","src":"2366:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2204:189:23"},"returnParameters":{"id":1802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1801,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2428:12:23","nodeType":"VariableDeclaration","scope":1803,"src":"2420:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1800,"name":"uint256","nodeType":"ElementaryTypeName","src":"2420:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2419:22:23"},"scope":2249,"src":"2185:257:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1804,"nodeType":"StructuredDocumentation","src":"2660:645:23","text":" @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order"},"functionSelector":"724dba33","id":1821,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityProportional","nameLocation":"3319:24:23","nodeType":"FunctionDefinition","parameters":{"id":1816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1806,"mutability":"mutable","name":"pool","nameLocation":"3361:4:23","nodeType":"VariableDeclaration","scope":1821,"src":"3353:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1805,"name":"address","nodeType":"ElementaryTypeName","src":"3353:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1809,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"3392:12:23","nodeType":"VariableDeclaration","scope":1821,"src":"3375:29:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1807,"name":"uint256","nodeType":"ElementaryTypeName","src":"3375:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1808,"nodeType":"ArrayTypeName","src":"3375:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1811,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"3422:17:23","nodeType":"VariableDeclaration","scope":1821,"src":"3414:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1810,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1813,"mutability":"mutable","name":"wethIsEth","nameLocation":"3454:9:23","nodeType":"VariableDeclaration","scope":1821,"src":"3449:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1812,"name":"bool","nodeType":"ElementaryTypeName","src":"3449:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1815,"mutability":"mutable","name":"userData","nameLocation":"3486:8:23","nodeType":"VariableDeclaration","scope":1821,"src":"3473:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1814,"name":"bytes","nodeType":"ElementaryTypeName","src":"3473:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3343:157:23"},"returnParameters":{"id":1820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1819,"mutability":"mutable","name":"amountsIn","nameLocation":"3544:9:23","nodeType":"VariableDeclaration","scope":1821,"src":"3527:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1817,"name":"uint256","nodeType":"ElementaryTypeName","src":"3527:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1818,"nodeType":"ArrayTypeName","src":"3527:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3526:28:23"},"scope":2249,"src":"3310:245:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1822,"nodeType":"StructuredDocumentation","src":"3561:574:23","text":" @notice Adds liquidity to a pool with arbitrary token amounts.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return bptAmountOut Actual amount of pool tokens received"},"functionSelector":"c08bc851","id":1838,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityUnbalanced","nameLocation":"4149:22:23","nodeType":"FunctionDefinition","parameters":{"id":1834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1824,"mutability":"mutable","name":"pool","nameLocation":"4189:4:23","nodeType":"VariableDeclaration","scope":1838,"src":"4181:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1823,"name":"address","nodeType":"ElementaryTypeName","src":"4181:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1827,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4220:14:23","nodeType":"VariableDeclaration","scope":1838,"src":"4203:31:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1825,"name":"uint256","nodeType":"ElementaryTypeName","src":"4203:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1826,"nodeType":"ArrayTypeName","src":"4203:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1829,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"4252:15:23","nodeType":"VariableDeclaration","scope":1838,"src":"4244:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1828,"name":"uint256","nodeType":"ElementaryTypeName","src":"4244:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1831,"mutability":"mutable","name":"wethIsEth","nameLocation":"4282:9:23","nodeType":"VariableDeclaration","scope":1838,"src":"4277:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1830,"name":"bool","nodeType":"ElementaryTypeName","src":"4277:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1833,"mutability":"mutable","name":"userData","nameLocation":"4314:8:23","nodeType":"VariableDeclaration","scope":1838,"src":"4301:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1832,"name":"bytes","nodeType":"ElementaryTypeName","src":"4301:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4171:157:23"},"returnParameters":{"id":1837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1836,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4363:12:23","nodeType":"VariableDeclaration","scope":1838,"src":"4355:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1835,"name":"uint256","nodeType":"ElementaryTypeName","src":"4355:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4354:22:23"},"scope":2249,"src":"4140:237:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1839,"nodeType":"StructuredDocumentation","src":"4383:605:23","text":" @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param maxAmountIn Maximum amount of tokens to be added\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountIn Actual amount of tokens added"},"functionSelector":"72657d17","id":1857,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquiditySingleTokenExactOut","nameLocation":"5002:31:23","nodeType":"FunctionDefinition","parameters":{"id":1853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"pool","nameLocation":"5051:4:23","nodeType":"VariableDeclaration","scope":1857,"src":"5043:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"5043:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1844,"mutability":"mutable","name":"tokenIn","nameLocation":"5072:7:23","nodeType":"VariableDeclaration","scope":1857,"src":"5065:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1843,"nodeType":"UserDefinedTypeName","pathNode":{"id":1842,"name":"IERC20","nameLocations":["5065:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5065:6:23"},"referencedDeclaration":9632,"src":"5065:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1846,"mutability":"mutable","name":"maxAmountIn","nameLocation":"5097:11:23","nodeType":"VariableDeclaration","scope":1857,"src":"5089:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1845,"name":"uint256","nodeType":"ElementaryTypeName","src":"5089:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1848,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"5126:17:23","nodeType":"VariableDeclaration","scope":1857,"src":"5118:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1847,"name":"uint256","nodeType":"ElementaryTypeName","src":"5118:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1850,"mutability":"mutable","name":"wethIsEth","nameLocation":"5158:9:23","nodeType":"VariableDeclaration","scope":1857,"src":"5153:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1849,"name":"bool","nodeType":"ElementaryTypeName","src":"5153:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1852,"mutability":"mutable","name":"userData","nameLocation":"5190:8:23","nodeType":"VariableDeclaration","scope":1857,"src":"5177:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1851,"name":"bytes","nodeType":"ElementaryTypeName","src":"5177:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5033:171:23"},"returnParameters":{"id":1856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1855,"mutability":"mutable","name":"amountIn","nameLocation":"5239:8:23","nodeType":"VariableDeclaration","scope":1857,"src":"5231:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1854,"name":"uint256","nodeType":"ElementaryTypeName","src":"5231:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5230:18:23"},"scope":2249,"src":"4993:256:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1858,"nodeType":"StructuredDocumentation","src":"5255:530:23","text":" @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n @dev To support donation, the pool config `enableDonation` flag must be set to true.\n @param pool Address of the liquidity pool\n @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to donate liquidity"},"functionSelector":"bf6ee3fd","id":1870,"implemented":false,"kind":"function","modifiers":[],"name":"donate","nameLocation":"5799:6:23","nodeType":"FunctionDefinition","parameters":{"id":1868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1860,"mutability":"mutable","name":"pool","nameLocation":"5814:4:23","nodeType":"VariableDeclaration","scope":1870,"src":"5806:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1859,"name":"address","nodeType":"ElementaryTypeName","src":"5806:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1863,"mutability":"mutable","name":"amountsIn","nameLocation":"5837:9:23","nodeType":"VariableDeclaration","scope":1870,"src":"5820:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1861,"name":"uint256","nodeType":"ElementaryTypeName","src":"5820:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1862,"nodeType":"ArrayTypeName","src":"5820:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1865,"mutability":"mutable","name":"wethIsEth","nameLocation":"5853:9:23","nodeType":"VariableDeclaration","scope":1870,"src":"5848:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1864,"name":"bool","nodeType":"ElementaryTypeName","src":"5848:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1867,"mutability":"mutable","name":"userData","nameLocation":"5877:8:23","nodeType":"VariableDeclaration","scope":1870,"src":"5864:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1866,"name":"bytes","nodeType":"ElementaryTypeName","src":"5864:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5805:81:23"},"returnParameters":{"id":1869,"nodeType":"ParameterList","parameters":[],"src":"5903:0:23"},"scope":2249,"src":"5790:114:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1871,"nodeType":"StructuredDocumentation","src":"5910:954:23","text":" @notice Adds liquidity to a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order\n @return bptAmountOut Actual amount of pool tokens received\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"0ca078ec","id":1892,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityCustom","nameLocation":"6878:18:23","nodeType":"FunctionDefinition","parameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1873,"mutability":"mutable","name":"pool","nameLocation":"6914:4:23","nodeType":"VariableDeclaration","scope":1892,"src":"6906:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1872,"name":"address","nodeType":"ElementaryTypeName","src":"6906:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1876,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"6945:12:23","nodeType":"VariableDeclaration","scope":1892,"src":"6928:29:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1874,"name":"uint256","nodeType":"ElementaryTypeName","src":"6928:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1875,"nodeType":"ArrayTypeName","src":"6928:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1878,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"6975:15:23","nodeType":"VariableDeclaration","scope":1892,"src":"6967:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1877,"name":"uint256","nodeType":"ElementaryTypeName","src":"6967:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1880,"mutability":"mutable","name":"wethIsEth","nameLocation":"7005:9:23","nodeType":"VariableDeclaration","scope":1892,"src":"7000:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1879,"name":"bool","nodeType":"ElementaryTypeName","src":"7000:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1882,"mutability":"mutable","name":"userData","nameLocation":"7037:8:23","nodeType":"VariableDeclaration","scope":1892,"src":"7024:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1881,"name":"bytes","nodeType":"ElementaryTypeName","src":"7024:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6896:155:23"},"returnParameters":{"id":1891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"mutability":"mutable","name":"amountsIn","nameLocation":"7095:9:23","nodeType":"VariableDeclaration","scope":1892,"src":"7078:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1884,"name":"uint256","nodeType":"ElementaryTypeName","src":"7078:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1885,"nodeType":"ArrayTypeName","src":"7078:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1888,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7114:12:23","nodeType":"VariableDeclaration","scope":1892,"src":"7106:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1887,"name":"uint256","nodeType":"ElementaryTypeName","src":"7106:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1890,"mutability":"mutable","name":"returnData","nameLocation":"7141:10:23","nodeType":"VariableDeclaration","scope":1892,"src":"7128:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1889,"name":"bytes","nodeType":"ElementaryTypeName","src":"7128:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7077:75:23"},"scope":2249,"src":"6869:284:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1893,"nodeType":"StructuredDocumentation","src":"7372:648:23","text":" @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"51682750","id":1910,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityProportional","nameLocation":"8034:27:23","nodeType":"FunctionDefinition","parameters":{"id":1905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1895,"mutability":"mutable","name":"pool","nameLocation":"8079:4:23","nodeType":"VariableDeclaration","scope":1910,"src":"8071:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1894,"name":"address","nodeType":"ElementaryTypeName","src":"8071:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1897,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8101:16:23","nodeType":"VariableDeclaration","scope":1910,"src":"8093:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1896,"name":"uint256","nodeType":"ElementaryTypeName","src":"8093:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1900,"mutability":"mutable","name":"minAmountsOut","nameLocation":"8144:13:23","nodeType":"VariableDeclaration","scope":1910,"src":"8127:30:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1898,"name":"uint256","nodeType":"ElementaryTypeName","src":"8127:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1899,"nodeType":"ArrayTypeName","src":"8127:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1902,"mutability":"mutable","name":"wethIsEth","nameLocation":"8172:9:23","nodeType":"VariableDeclaration","scope":1910,"src":"8167:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1901,"name":"bool","nodeType":"ElementaryTypeName","src":"8167:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1904,"mutability":"mutable","name":"userData","nameLocation":"8204:8:23","nodeType":"VariableDeclaration","scope":1910,"src":"8191:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1903,"name":"bytes","nodeType":"ElementaryTypeName","src":"8191:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8061:157:23"},"returnParameters":{"id":1909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"amountsOut","nameLocation":"8262:10:23","nodeType":"VariableDeclaration","scope":1910,"src":"8245:27:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1906,"name":"uint256","nodeType":"ElementaryTypeName","src":"8245:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1907,"nodeType":"ArrayTypeName","src":"8245:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8244:29:23"},"scope":2249,"src":"8025:249:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1911,"nodeType":"StructuredDocumentation","src":"8280:613:23","text":" @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param minAmountOut Minimum amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountOut Actual amount of tokens received"},"functionSelector":"ecb2182c","id":1929,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactIn","nameLocation":"8907:33:23","nodeType":"FunctionDefinition","parameters":{"id":1925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1913,"mutability":"mutable","name":"pool","nameLocation":"8958:4:23","nodeType":"VariableDeclaration","scope":1929,"src":"8950:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1912,"name":"address","nodeType":"ElementaryTypeName","src":"8950:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1915,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8980:16:23","nodeType":"VariableDeclaration","scope":1929,"src":"8972:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1914,"name":"uint256","nodeType":"ElementaryTypeName","src":"8972:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"tokenOut","nameLocation":"9013:8:23","nodeType":"VariableDeclaration","scope":1929,"src":"9006:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1917,"nodeType":"UserDefinedTypeName","pathNode":{"id":1916,"name":"IERC20","nameLocations":["9006:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"9006:6:23"},"referencedDeclaration":9632,"src":"9006:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1920,"mutability":"mutable","name":"minAmountOut","nameLocation":"9039:12:23","nodeType":"VariableDeclaration","scope":1929,"src":"9031:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1919,"name":"uint256","nodeType":"ElementaryTypeName","src":"9031:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1922,"mutability":"mutable","name":"wethIsEth","nameLocation":"9066:9:23","nodeType":"VariableDeclaration","scope":1929,"src":"9061:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1921,"name":"bool","nodeType":"ElementaryTypeName","src":"9061:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1924,"mutability":"mutable","name":"userData","nameLocation":"9098:8:23","nodeType":"VariableDeclaration","scope":1929,"src":"9085:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1923,"name":"bytes","nodeType":"ElementaryTypeName","src":"9085:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8940:172:23"},"returnParameters":{"id":1928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"amountOut","nameLocation":"9147:9:23","nodeType":"VariableDeclaration","scope":1929,"src":"9139:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1926,"name":"uint256","nodeType":"ElementaryTypeName","src":"9139:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9138:19:23"},"scope":2249,"src":"8898:260:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1930,"nodeType":"StructuredDocumentation","src":"9164:632:23","text":" @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Exact amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned"},"functionSelector":"e7326def","id":1948,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactOut","nameLocation":"9810:34:23","nodeType":"FunctionDefinition","parameters":{"id":1944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1932,"mutability":"mutable","name":"pool","nameLocation":"9862:4:23","nodeType":"VariableDeclaration","scope":1948,"src":"9854:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1931,"name":"address","nodeType":"ElementaryTypeName","src":"9854:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1934,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"9884:14:23","nodeType":"VariableDeclaration","scope":1948,"src":"9876:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1933,"name":"uint256","nodeType":"ElementaryTypeName","src":"9876:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1937,"mutability":"mutable","name":"tokenOut","nameLocation":"9915:8:23","nodeType":"VariableDeclaration","scope":1948,"src":"9908:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1936,"nodeType":"UserDefinedTypeName","pathNode":{"id":1935,"name":"IERC20","nameLocations":["9908:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"9908:6:23"},"referencedDeclaration":9632,"src":"9908:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1939,"mutability":"mutable","name":"exactAmountOut","nameLocation":"9941:14:23","nodeType":"VariableDeclaration","scope":1948,"src":"9933:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1938,"name":"uint256","nodeType":"ElementaryTypeName","src":"9933:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"wethIsEth","nameLocation":"9970:9:23","nodeType":"VariableDeclaration","scope":1948,"src":"9965:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1940,"name":"bool","nodeType":"ElementaryTypeName","src":"9965:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1943,"mutability":"mutable","name":"userData","nameLocation":"10002:8:23","nodeType":"VariableDeclaration","scope":1948,"src":"9989:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1942,"name":"bytes","nodeType":"ElementaryTypeName","src":"9989:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9844:172:23"},"returnParameters":{"id":1947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1946,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10051:11:23","nodeType":"VariableDeclaration","scope":1948,"src":"10043:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1945,"name":"uint256","nodeType":"ElementaryTypeName","src":"10043:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10042:21:23"},"scope":2249,"src":"9801:263:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1949,"nodeType":"StructuredDocumentation","src":"10070:960:23","text":" @notice Removes liquidity from a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned\n @return amountsOut Actual amounts of tokens received, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"82bf2b24","id":1970,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityCustom","nameLocation":"11044:21:23","nodeType":"FunctionDefinition","parameters":{"id":1961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1951,"mutability":"mutable","name":"pool","nameLocation":"11083:4:23","nodeType":"VariableDeclaration","scope":1970,"src":"11075:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1950,"name":"address","nodeType":"ElementaryTypeName","src":"11075:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1953,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"11105:14:23","nodeType":"VariableDeclaration","scope":1970,"src":"11097:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1952,"name":"uint256","nodeType":"ElementaryTypeName","src":"11097:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1956,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11146:13:23","nodeType":"VariableDeclaration","scope":1970,"src":"11129:30:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1954,"name":"uint256","nodeType":"ElementaryTypeName","src":"11129:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1955,"nodeType":"ArrayTypeName","src":"11129:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1958,"mutability":"mutable","name":"wethIsEth","nameLocation":"11174:9:23","nodeType":"VariableDeclaration","scope":1970,"src":"11169:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1957,"name":"bool","nodeType":"ElementaryTypeName","src":"11169:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1960,"mutability":"mutable","name":"userData","nameLocation":"11206:8:23","nodeType":"VariableDeclaration","scope":1970,"src":"11193:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1959,"name":"bytes","nodeType":"ElementaryTypeName","src":"11193:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11065:155:23"},"returnParameters":{"id":1969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1963,"mutability":"mutable","name":"bptAmountIn","nameLocation":"11255:11:23","nodeType":"VariableDeclaration","scope":1970,"src":"11247:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1962,"name":"uint256","nodeType":"ElementaryTypeName","src":"11247:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1966,"mutability":"mutable","name":"amountsOut","nameLocation":"11285:10:23","nodeType":"VariableDeclaration","scope":1970,"src":"11268:27:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1964,"name":"uint256","nodeType":"ElementaryTypeName","src":"11268:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1965,"nodeType":"ArrayTypeName","src":"11268:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1968,"mutability":"mutable","name":"returnData","nameLocation":"11310:10:23","nodeType":"VariableDeclaration","scope":1970,"src":"11297:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1967,"name":"bytes","nodeType":"ElementaryTypeName","src":"11297:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11246:75:23"},"scope":2249,"src":"11035:287:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"11328:447:23","text":" @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"08c04793","id":1984,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"11789:23:23","nodeType":"FunctionDefinition","parameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1973,"mutability":"mutable","name":"pool","nameLocation":"11830:4:23","nodeType":"VariableDeclaration","scope":1984,"src":"11822:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1972,"name":"address","nodeType":"ElementaryTypeName","src":"11822:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1975,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"11852:16:23","nodeType":"VariableDeclaration","scope":1984,"src":"11844:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1974,"name":"uint256","nodeType":"ElementaryTypeName","src":"11844:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1978,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11895:13:23","nodeType":"VariableDeclaration","scope":1984,"src":"11878:30:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1976,"name":"uint256","nodeType":"ElementaryTypeName","src":"11878:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1977,"nodeType":"ArrayTypeName","src":"11878:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11812:102:23"},"returnParameters":{"id":1983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1982,"mutability":"mutable","name":"amountsOut","nameLocation":"11958:10:23","nodeType":"VariableDeclaration","scope":1984,"src":"11941:27:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1980,"name":"uint256","nodeType":"ElementaryTypeName","src":"11941:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1981,"nodeType":"ArrayTypeName","src":"11941:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11940:29:23"},"scope":2249,"src":"11780:190:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"canonicalName":"IRouter.SwapSingleTokenHookParams","documentation":{"id":1985,"nodeType":"StructuredDocumentation","src":"12184:770:23","text":" @notice Data for the swap hook.\n @param sender Account initiating the swap operation\n @param kind Type of swap (exact in or exact out)\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountGiven Amount given based on kind of the swap (e.g., tokenIn for exact in)\n @param limit Maximum or minimum amount based on the kind of swap (e.g., maxAmountIn for exact out)\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request"},"id":2009,"members":[{"constant":false,"id":1987,"mutability":"mutable","name":"sender","nameLocation":"13010:6:23","nodeType":"VariableDeclaration","scope":2009,"src":"13002:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1986,"name":"address","nodeType":"ElementaryTypeName","src":"13002:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1990,"mutability":"mutable","name":"kind","nameLocation":"13035:4:23","nodeType":"VariableDeclaration","scope":2009,"src":"13026:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"},"typeName":{"id":1989,"nodeType":"UserDefinedTypeName","pathNode":{"id":1988,"name":"SwapKind","nameLocations":["13026:8:23"],"nodeType":"IdentifierPath","referencedDeclaration":3943,"src":"13026:8:23"},"referencedDeclaration":3943,"src":"13026:8:23","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":1992,"mutability":"mutable","name":"pool","nameLocation":"13057:4:23","nodeType":"VariableDeclaration","scope":2009,"src":"13049:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1991,"name":"address","nodeType":"ElementaryTypeName","src":"13049:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1995,"mutability":"mutable","name":"tokenIn","nameLocation":"13078:7:23","nodeType":"VariableDeclaration","scope":2009,"src":"13071:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IERC20","nameLocations":["13071:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"13071:6:23"},"referencedDeclaration":9632,"src":"13071:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1998,"mutability":"mutable","name":"tokenOut","nameLocation":"13102:8:23","nodeType":"VariableDeclaration","scope":2009,"src":"13095:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":1997,"nodeType":"UserDefinedTypeName","pathNode":{"id":1996,"name":"IERC20","nameLocations":["13095:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"13095:6:23"},"referencedDeclaration":9632,"src":"13095:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2000,"mutability":"mutable","name":"amountGiven","nameLocation":"13128:11:23","nodeType":"VariableDeclaration","scope":2009,"src":"13120:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1999,"name":"uint256","nodeType":"ElementaryTypeName","src":"13120:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2002,"mutability":"mutable","name":"limit","nameLocation":"13157:5:23","nodeType":"VariableDeclaration","scope":2009,"src":"13149:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2001,"name":"uint256","nodeType":"ElementaryTypeName","src":"13149:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2004,"mutability":"mutable","name":"deadline","nameLocation":"13180:8:23","nodeType":"VariableDeclaration","scope":2009,"src":"13172:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2003,"name":"uint256","nodeType":"ElementaryTypeName","src":"13172:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2006,"mutability":"mutable","name":"wethIsEth","nameLocation":"13203:9:23","nodeType":"VariableDeclaration","scope":2009,"src":"13198:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2005,"name":"bool","nodeType":"ElementaryTypeName","src":"13198:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2008,"mutability":"mutable","name":"userData","nameLocation":"13228:8:23","nodeType":"VariableDeclaration","scope":2009,"src":"13222:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2007,"name":"bytes","nodeType":"ElementaryTypeName","src":"13222:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapSingleTokenHookParams","nameLocation":"12966:25:23","nodeType":"StructDefinition","scope":2249,"src":"12959:284:23","visibility":"public"},{"documentation":{"id":2010,"nodeType":"StructuredDocumentation","src":"13249:744:23","text":" @notice Executes a swap operation specifying an exact input token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param minAmountOut Minimum amount of tokens to be received\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"750283bc","id":2033,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactIn","nameLocation":"14007:22:23","nodeType":"FunctionDefinition","parameters":{"id":2029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2012,"mutability":"mutable","name":"pool","nameLocation":"14047:4:23","nodeType":"VariableDeclaration","scope":2033,"src":"14039:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2011,"name":"address","nodeType":"ElementaryTypeName","src":"14039:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2015,"mutability":"mutable","name":"tokenIn","nameLocation":"14068:7:23","nodeType":"VariableDeclaration","scope":2033,"src":"14061:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2014,"nodeType":"UserDefinedTypeName","pathNode":{"id":2013,"name":"IERC20","nameLocations":["14061:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"14061:6:23"},"referencedDeclaration":9632,"src":"14061:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2018,"mutability":"mutable","name":"tokenOut","nameLocation":"14092:8:23","nodeType":"VariableDeclaration","scope":2033,"src":"14085:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2017,"nodeType":"UserDefinedTypeName","pathNode":{"id":2016,"name":"IERC20","nameLocations":["14085:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"14085:6:23"},"referencedDeclaration":9632,"src":"14085:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2020,"mutability":"mutable","name":"exactAmountIn","nameLocation":"14118:13:23","nodeType":"VariableDeclaration","scope":2033,"src":"14110:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2019,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2022,"mutability":"mutable","name":"minAmountOut","nameLocation":"14149:12:23","nodeType":"VariableDeclaration","scope":2033,"src":"14141:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2021,"name":"uint256","nodeType":"ElementaryTypeName","src":"14141:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2024,"mutability":"mutable","name":"deadline","nameLocation":"14179:8:23","nodeType":"VariableDeclaration","scope":2033,"src":"14171:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2023,"name":"uint256","nodeType":"ElementaryTypeName","src":"14171:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2026,"mutability":"mutable","name":"wethIsEth","nameLocation":"14202:9:23","nodeType":"VariableDeclaration","scope":2033,"src":"14197:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2025,"name":"bool","nodeType":"ElementaryTypeName","src":"14197:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2028,"mutability":"mutable","name":"userData","nameLocation":"14236:8:23","nodeType":"VariableDeclaration","scope":2033,"src":"14221:23:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2027,"name":"bytes","nodeType":"ElementaryTypeName","src":"14221:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14029:221:23"},"returnParameters":{"id":2032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2031,"mutability":"mutable","name":"amountOut","nameLocation":"14285:9:23","nodeType":"VariableDeclaration","scope":2033,"src":"14277:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2030,"name":"uint256","nodeType":"ElementaryTypeName","src":"14277:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14276:19:23"},"scope":2249,"src":"13998:298:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2034,"nodeType":"StructuredDocumentation","src":"14302:743:23","text":" @notice Executes a swap operation specifying an exact output token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param maxAmountIn Maximum amount of tokens to be sent\n @param deadline Deadline for the swap, after which it will revert\n @param userData Additional (optional) data sent with the swap request\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"94e86ef8","id":2057,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactOut","nameLocation":"15059:23:23","nodeType":"FunctionDefinition","parameters":{"id":2053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2036,"mutability":"mutable","name":"pool","nameLocation":"15100:4:23","nodeType":"VariableDeclaration","scope":2057,"src":"15092:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2035,"name":"address","nodeType":"ElementaryTypeName","src":"15092:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2039,"mutability":"mutable","name":"tokenIn","nameLocation":"15121:7:23","nodeType":"VariableDeclaration","scope":2057,"src":"15114:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2038,"nodeType":"UserDefinedTypeName","pathNode":{"id":2037,"name":"IERC20","nameLocations":["15114:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"15114:6:23"},"referencedDeclaration":9632,"src":"15114:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2042,"mutability":"mutable","name":"tokenOut","nameLocation":"15145:8:23","nodeType":"VariableDeclaration","scope":2057,"src":"15138:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2041,"nodeType":"UserDefinedTypeName","pathNode":{"id":2040,"name":"IERC20","nameLocations":["15138:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"15138:6:23"},"referencedDeclaration":9632,"src":"15138:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2044,"mutability":"mutable","name":"exactAmountOut","nameLocation":"15171:14:23","nodeType":"VariableDeclaration","scope":2057,"src":"15163:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2043,"name":"uint256","nodeType":"ElementaryTypeName","src":"15163:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2046,"mutability":"mutable","name":"maxAmountIn","nameLocation":"15203:11:23","nodeType":"VariableDeclaration","scope":2057,"src":"15195:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2045,"name":"uint256","nodeType":"ElementaryTypeName","src":"15195:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2048,"mutability":"mutable","name":"deadline","nameLocation":"15232:8:23","nodeType":"VariableDeclaration","scope":2057,"src":"15224:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2047,"name":"uint256","nodeType":"ElementaryTypeName","src":"15224:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2050,"mutability":"mutable","name":"wethIsEth","nameLocation":"15255:9:23","nodeType":"VariableDeclaration","scope":2057,"src":"15250:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2049,"name":"bool","nodeType":"ElementaryTypeName","src":"15250:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2052,"mutability":"mutable","name":"userData","nameLocation":"15289:8:23","nodeType":"VariableDeclaration","scope":2057,"src":"15274:23:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2051,"name":"bytes","nodeType":"ElementaryTypeName","src":"15274:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15082:221:23"},"returnParameters":{"id":2056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2055,"mutability":"mutable","name":"amountIn","nameLocation":"15338:8:23","nodeType":"VariableDeclaration","scope":2057,"src":"15330:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2054,"name":"uint256","nodeType":"ElementaryTypeName","src":"15330:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15329:18:23"},"scope":2249,"src":"15050:298:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2058,"nodeType":"StructuredDocumentation","src":"15563:518:23","text":" @notice Queries an `addLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order"},"functionSelector":"9de90518","id":2072,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityProportional","nameLocation":"16095:29:23","nodeType":"FunctionDefinition","parameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2060,"mutability":"mutable","name":"pool","nameLocation":"16142:4:23","nodeType":"VariableDeclaration","scope":2072,"src":"16134:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2059,"name":"address","nodeType":"ElementaryTypeName","src":"16134:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2062,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"16164:17:23","nodeType":"VariableDeclaration","scope":2072,"src":"16156:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2061,"name":"uint256","nodeType":"ElementaryTypeName","src":"16156:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2064,"mutability":"mutable","name":"sender","nameLocation":"16199:6:23","nodeType":"VariableDeclaration","scope":2072,"src":"16191:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2063,"name":"address","nodeType":"ElementaryTypeName","src":"16191:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2066,"mutability":"mutable","name":"userData","nameLocation":"16228:8:23","nodeType":"VariableDeclaration","scope":2072,"src":"16215:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2065,"name":"bytes","nodeType":"ElementaryTypeName","src":"16215:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16124:118:23"},"returnParameters":{"id":2071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2070,"mutability":"mutable","name":"amountsIn","nameLocation":"16278:9:23","nodeType":"VariableDeclaration","scope":2072,"src":"16261:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2068,"name":"uint256","nodeType":"ElementaryTypeName","src":"16261:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2069,"nodeType":"ArrayTypeName","src":"16261:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16260:28:23"},"scope":2249,"src":"16086:203:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2073,"nodeType":"StructuredDocumentation","src":"16295:517:23","text":" @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountOut Expected amount of pool tokens to receive"},"functionSelector":"da001f7d","id":2087,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalanced","nameLocation":"16826:27:23","nodeType":"FunctionDefinition","parameters":{"id":2083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2075,"mutability":"mutable","name":"pool","nameLocation":"16871:4:23","nodeType":"VariableDeclaration","scope":2087,"src":"16863:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"16863:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2078,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"16902:14:23","nodeType":"VariableDeclaration","scope":2087,"src":"16885:31:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"16885:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2077,"nodeType":"ArrayTypeName","src":"16885:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2080,"mutability":"mutable","name":"sender","nameLocation":"16934:6:23","nodeType":"VariableDeclaration","scope":2087,"src":"16926:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2079,"name":"address","nodeType":"ElementaryTypeName","src":"16926:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2082,"mutability":"mutable","name":"userData","nameLocation":"16963:8:23","nodeType":"VariableDeclaration","scope":2087,"src":"16950:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2081,"name":"bytes","nodeType":"ElementaryTypeName","src":"16950:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16853:124:23"},"returnParameters":{"id":2086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2085,"mutability":"mutable","name":"bptAmountOut","nameLocation":"17004:12:23","nodeType":"VariableDeclaration","scope":2087,"src":"16996:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2084,"name":"uint256","nodeType":"ElementaryTypeName","src":"16996:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16995:22:23"},"scope":2249,"src":"16817:201:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2088,"nodeType":"StructuredDocumentation","src":"17024:542:23","text":" @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param exactBptAmountOut Expected exact amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Expected amount of tokens to add"},"functionSelector":"1d56798d","id":2104,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquiditySingleTokenExactOut","nameLocation":"17580:36:23","nodeType":"FunctionDefinition","parameters":{"id":2100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2090,"mutability":"mutable","name":"pool","nameLocation":"17634:4:23","nodeType":"VariableDeclaration","scope":2104,"src":"17626:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2089,"name":"address","nodeType":"ElementaryTypeName","src":"17626:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"tokenIn","nameLocation":"17655:7:23","nodeType":"VariableDeclaration","scope":2104,"src":"17648:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2092,"nodeType":"UserDefinedTypeName","pathNode":{"id":2091,"name":"IERC20","nameLocations":["17648:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"17648:6:23"},"referencedDeclaration":9632,"src":"17648:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2095,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"17680:17:23","nodeType":"VariableDeclaration","scope":2104,"src":"17672:25:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2094,"name":"uint256","nodeType":"ElementaryTypeName","src":"17672:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2097,"mutability":"mutable","name":"sender","nameLocation":"17715:6:23","nodeType":"VariableDeclaration","scope":2104,"src":"17707:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2096,"name":"address","nodeType":"ElementaryTypeName","src":"17707:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2099,"mutability":"mutable","name":"userData","nameLocation":"17744:8:23","nodeType":"VariableDeclaration","scope":2104,"src":"17731:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2098,"name":"bytes","nodeType":"ElementaryTypeName","src":"17731:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17616:142:23"},"returnParameters":{"id":2103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2102,"mutability":"mutable","name":"amountIn","nameLocation":"17785:8:23","nodeType":"VariableDeclaration","scope":2104,"src":"17777:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2101,"name":"uint256","nodeType":"ElementaryTypeName","src":"17777:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17776:18:23"},"scope":2249,"src":"17571:224:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2105,"nodeType":"StructuredDocumentation","src":"17801:779:23","text":" @notice Queries an `addLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Expected minimum amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n @return bptAmountOut Expected amount of pool tokens to receive\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"452db952","id":2126,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityCustom","nameLocation":"18594:23:23","nodeType":"FunctionDefinition","parameters":{"id":2117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2107,"mutability":"mutable","name":"pool","nameLocation":"18635:4:23","nodeType":"VariableDeclaration","scope":2126,"src":"18627:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2106,"name":"address","nodeType":"ElementaryTypeName","src":"18627:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2110,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"18666:12:23","nodeType":"VariableDeclaration","scope":2126,"src":"18649:29:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2108,"name":"uint256","nodeType":"ElementaryTypeName","src":"18649:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2109,"nodeType":"ArrayTypeName","src":"18649:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2112,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"18696:15:23","nodeType":"VariableDeclaration","scope":2126,"src":"18688:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2111,"name":"uint256","nodeType":"ElementaryTypeName","src":"18688:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2114,"mutability":"mutable","name":"sender","nameLocation":"18729:6:23","nodeType":"VariableDeclaration","scope":2126,"src":"18721:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2113,"name":"address","nodeType":"ElementaryTypeName","src":"18721:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2116,"mutability":"mutable","name":"userData","nameLocation":"18758:8:23","nodeType":"VariableDeclaration","scope":2126,"src":"18745:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2115,"name":"bytes","nodeType":"ElementaryTypeName","src":"18745:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18617:155:23"},"returnParameters":{"id":2125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2120,"mutability":"mutable","name":"amountsIn","nameLocation":"18808:9:23","nodeType":"VariableDeclaration","scope":2126,"src":"18791:26:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2118,"name":"uint256","nodeType":"ElementaryTypeName","src":"18791:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2119,"nodeType":"ArrayTypeName","src":"18791:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2122,"mutability":"mutable","name":"bptAmountOut","nameLocation":"18827:12:23","nodeType":"VariableDeclaration","scope":2126,"src":"18819:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2121,"name":"uint256","nodeType":"ElementaryTypeName","src":"18819:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2124,"mutability":"mutable","name":"returnData","nameLocation":"18854:10:23","nodeType":"VariableDeclaration","scope":2126,"src":"18841:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2123,"name":"bytes","nodeType":"ElementaryTypeName","src":"18841:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18790:75:23"},"scope":2249,"src":"18585:281:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2127,"nodeType":"StructuredDocumentation","src":"18872:532:23","text":" @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"0f710888","id":2141,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityProportional","nameLocation":"19418:32:23","nodeType":"FunctionDefinition","parameters":{"id":2136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2129,"mutability":"mutable","name":"pool","nameLocation":"19468:4:23","nodeType":"VariableDeclaration","scope":2141,"src":"19460:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2128,"name":"address","nodeType":"ElementaryTypeName","src":"19460:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2131,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"19490:16:23","nodeType":"VariableDeclaration","scope":2141,"src":"19482:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2130,"name":"uint256","nodeType":"ElementaryTypeName","src":"19482:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2133,"mutability":"mutable","name":"sender","nameLocation":"19524:6:23","nodeType":"VariableDeclaration","scope":2141,"src":"19516:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2132,"name":"address","nodeType":"ElementaryTypeName","src":"19516:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2135,"mutability":"mutable","name":"userData","nameLocation":"19553:8:23","nodeType":"VariableDeclaration","scope":2141,"src":"19540:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2134,"name":"bytes","nodeType":"ElementaryTypeName","src":"19540:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19450:117:23"},"returnParameters":{"id":2140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2139,"mutability":"mutable","name":"amountsOut","nameLocation":"19603:10:23","nodeType":"VariableDeclaration","scope":2141,"src":"19586:27:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2137,"name":"uint256","nodeType":"ElementaryTypeName","src":"19586:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2138,"nodeType":"ArrayTypeName","src":"19586:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19585:29:23"},"scope":2249,"src":"19409:206:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2142,"nodeType":"StructuredDocumentation","src":"19621:554:23","text":" @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param tokenOut Token used to remove liquidity\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Expected amount of tokens to receive"},"functionSelector":"23b39241","id":2158,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactIn","nameLocation":"20189:38:23","nodeType":"FunctionDefinition","parameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2144,"mutability":"mutable","name":"pool","nameLocation":"20245:4:23","nodeType":"VariableDeclaration","scope":2158,"src":"20237:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2143,"name":"address","nodeType":"ElementaryTypeName","src":"20237:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2146,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20267:16:23","nodeType":"VariableDeclaration","scope":2158,"src":"20259:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2145,"name":"uint256","nodeType":"ElementaryTypeName","src":"20259:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2149,"mutability":"mutable","name":"tokenOut","nameLocation":"20300:8:23","nodeType":"VariableDeclaration","scope":2158,"src":"20293:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2148,"nodeType":"UserDefinedTypeName","pathNode":{"id":2147,"name":"IERC20","nameLocations":["20293:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"20293:6:23"},"referencedDeclaration":9632,"src":"20293:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2151,"mutability":"mutable","name":"sender","nameLocation":"20326:6:23","nodeType":"VariableDeclaration","scope":2158,"src":"20318:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2150,"name":"address","nodeType":"ElementaryTypeName","src":"20318:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2153,"mutability":"mutable","name":"userData","nameLocation":"20355:8:23","nodeType":"VariableDeclaration","scope":2158,"src":"20342:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2152,"name":"bytes","nodeType":"ElementaryTypeName","src":"20342:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20227:142:23"},"returnParameters":{"id":2157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2156,"mutability":"mutable","name":"amountOut","nameLocation":"20396:9:23","nodeType":"VariableDeclaration","scope":2158,"src":"20388:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2155,"name":"uint256","nodeType":"ElementaryTypeName","src":"20388:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20387:19:23"},"scope":2249,"src":"20180:227:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2159,"nodeType":"StructuredDocumentation","src":"20413:549:23","text":" @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Expected exact amount of tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn"},"functionSelector":"53d0bb98","id":2175,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactOut","nameLocation":"20976:39:23","nodeType":"FunctionDefinition","parameters":{"id":2171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2161,"mutability":"mutable","name":"pool","nameLocation":"21033:4:23","nodeType":"VariableDeclaration","scope":2175,"src":"21025:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2160,"name":"address","nodeType":"ElementaryTypeName","src":"21025:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2164,"mutability":"mutable","name":"tokenOut","nameLocation":"21054:8:23","nodeType":"VariableDeclaration","scope":2175,"src":"21047:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2163,"nodeType":"UserDefinedTypeName","pathNode":{"id":2162,"name":"IERC20","nameLocations":["21047:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"21047:6:23"},"referencedDeclaration":9632,"src":"21047:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"exactAmountOut","nameLocation":"21080:14:23","nodeType":"VariableDeclaration","scope":2175,"src":"21072:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2165,"name":"uint256","nodeType":"ElementaryTypeName","src":"21072:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2168,"mutability":"mutable","name":"sender","nameLocation":"21112:6:23","nodeType":"VariableDeclaration","scope":2175,"src":"21104:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2167,"name":"address","nodeType":"ElementaryTypeName","src":"21104:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2170,"mutability":"mutable","name":"userData","nameLocation":"21141:8:23","nodeType":"VariableDeclaration","scope":2175,"src":"21128:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2169,"name":"bytes","nodeType":"ElementaryTypeName","src":"21128:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21015:140:23"},"returnParameters":{"id":2174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2173,"mutability":"mutable","name":"bptAmountIn","nameLocation":"21182:11:23","nodeType":"VariableDeclaration","scope":2175,"src":"21174:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2172,"name":"uint256","nodeType":"ElementaryTypeName","src":"21174:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21173:21:23"},"scope":2249,"src":"20967:228:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2176,"nodeType":"StructuredDocumentation","src":"21201:779:23","text":" @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"c330c7be","id":2197,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityCustom","nameLocation":"21994:26:23","nodeType":"FunctionDefinition","parameters":{"id":2188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2178,"mutability":"mutable","name":"pool","nameLocation":"22038:4:23","nodeType":"VariableDeclaration","scope":2197,"src":"22030:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2177,"name":"address","nodeType":"ElementaryTypeName","src":"22030:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2180,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"22060:14:23","nodeType":"VariableDeclaration","scope":2197,"src":"22052:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2179,"name":"uint256","nodeType":"ElementaryTypeName","src":"22052:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2183,"mutability":"mutable","name":"minAmountsOut","nameLocation":"22101:13:23","nodeType":"VariableDeclaration","scope":2197,"src":"22084:30:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2181,"name":"uint256","nodeType":"ElementaryTypeName","src":"22084:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2182,"nodeType":"ArrayTypeName","src":"22084:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2185,"mutability":"mutable","name":"sender","nameLocation":"22132:6:23","nodeType":"VariableDeclaration","scope":2197,"src":"22124:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2184,"name":"address","nodeType":"ElementaryTypeName","src":"22124:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"userData","nameLocation":"22161:8:23","nodeType":"VariableDeclaration","scope":2197,"src":"22148:21:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2186,"name":"bytes","nodeType":"ElementaryTypeName","src":"22148:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22020:155:23"},"returnParameters":{"id":2196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2190,"mutability":"mutable","name":"bptAmountIn","nameLocation":"22202:11:23","nodeType":"VariableDeclaration","scope":2197,"src":"22194:19:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2189,"name":"uint256","nodeType":"ElementaryTypeName","src":"22194:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2193,"mutability":"mutable","name":"amountsOut","nameLocation":"22232:10:23","nodeType":"VariableDeclaration","scope":2197,"src":"22215:27:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2191,"name":"uint256","nodeType":"ElementaryTypeName","src":"22215:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2192,"nodeType":"ArrayTypeName","src":"22215:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2195,"mutability":"mutable","name":"returnData","nameLocation":"22257:10:23","nodeType":"VariableDeclaration","scope":2197,"src":"22244:23:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2194,"name":"bytes","nodeType":"ElementaryTypeName","src":"22244:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22193:75:23"},"scope":2249,"src":"21985:284:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2198,"nodeType":"StructuredDocumentation","src":"22275:334:23","text":" @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"b037ed36","id":2208,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityRecovery","nameLocation":"22623:28:23","nodeType":"FunctionDefinition","parameters":{"id":2203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2200,"mutability":"mutable","name":"pool","nameLocation":"22669:4:23","nodeType":"VariableDeclaration","scope":2208,"src":"22661:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2199,"name":"address","nodeType":"ElementaryTypeName","src":"22661:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2202,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"22691:16:23","nodeType":"VariableDeclaration","scope":2208,"src":"22683:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2201,"name":"uint256","nodeType":"ElementaryTypeName","src":"22683:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22651:62:23"},"returnParameters":{"id":2207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2206,"mutability":"mutable","name":"amountsOut","nameLocation":"22749:10:23","nodeType":"VariableDeclaration","scope":2208,"src":"22732:27:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2204,"name":"uint256","nodeType":"ElementaryTypeName","src":"22732:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2205,"nodeType":"ArrayTypeName","src":"22732:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"22731:29:23"},"scope":2249,"src":"22614:147:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2209,"nodeType":"StructuredDocumentation","src":"22767:637:23","text":" @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"3ebc54e5","id":2228,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactIn","nameLocation":"23418:27:23","nodeType":"FunctionDefinition","parameters":{"id":2224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2211,"mutability":"mutable","name":"pool","nameLocation":"23463:4:23","nodeType":"VariableDeclaration","scope":2228,"src":"23455:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2210,"name":"address","nodeType":"ElementaryTypeName","src":"23455:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"tokenIn","nameLocation":"23484:7:23","nodeType":"VariableDeclaration","scope":2228,"src":"23477:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2213,"nodeType":"UserDefinedTypeName","pathNode":{"id":2212,"name":"IERC20","nameLocations":["23477:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"23477:6:23"},"referencedDeclaration":9632,"src":"23477:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2217,"mutability":"mutable","name":"tokenOut","nameLocation":"23508:8:23","nodeType":"VariableDeclaration","scope":2228,"src":"23501:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2216,"nodeType":"UserDefinedTypeName","pathNode":{"id":2215,"name":"IERC20","nameLocations":["23501:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"23501:6:23"},"referencedDeclaration":9632,"src":"23501:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2219,"mutability":"mutable","name":"exactAmountIn","nameLocation":"23534:13:23","nodeType":"VariableDeclaration","scope":2228,"src":"23526:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2218,"name":"uint256","nodeType":"ElementaryTypeName","src":"23526:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2221,"mutability":"mutable","name":"sender","nameLocation":"23565:6:23","nodeType":"VariableDeclaration","scope":2228,"src":"23557:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2220,"name":"address","nodeType":"ElementaryTypeName","src":"23557:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2223,"mutability":"mutable","name":"userData","nameLocation":"23596:8:23","nodeType":"VariableDeclaration","scope":2228,"src":"23581:23:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2222,"name":"bytes","nodeType":"ElementaryTypeName","src":"23581:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23445:165:23"},"returnParameters":{"id":2227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2226,"mutability":"mutable","name":"amountOut","nameLocation":"23637:9:23","nodeType":"VariableDeclaration","scope":2228,"src":"23629:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2225,"name":"uint256","nodeType":"ElementaryTypeName","src":"23629:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23628:19:23"},"scope":2249,"src":"23409:239:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2229,"nodeType":"StructuredDocumentation","src":"23654:641:23","text":" @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"175d4408","id":2248,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactOut","nameLocation":"24309:28:23","nodeType":"FunctionDefinition","parameters":{"id":2244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2231,"mutability":"mutable","name":"pool","nameLocation":"24355:4:23","nodeType":"VariableDeclaration","scope":2248,"src":"24347:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2230,"name":"address","nodeType":"ElementaryTypeName","src":"24347:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2234,"mutability":"mutable","name":"tokenIn","nameLocation":"24376:7:23","nodeType":"VariableDeclaration","scope":2248,"src":"24369:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2233,"nodeType":"UserDefinedTypeName","pathNode":{"id":2232,"name":"IERC20","nameLocations":["24369:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"24369:6:23"},"referencedDeclaration":9632,"src":"24369:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2237,"mutability":"mutable","name":"tokenOut","nameLocation":"24400:8:23","nodeType":"VariableDeclaration","scope":2248,"src":"24393:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2236,"nodeType":"UserDefinedTypeName","pathNode":{"id":2235,"name":"IERC20","nameLocations":["24393:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"24393:6:23"},"referencedDeclaration":9632,"src":"24393:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2239,"mutability":"mutable","name":"exactAmountOut","nameLocation":"24426:14:23","nodeType":"VariableDeclaration","scope":2248,"src":"24418:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2238,"name":"uint256","nodeType":"ElementaryTypeName","src":"24418:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2241,"mutability":"mutable","name":"sender","nameLocation":"24458:6:23","nodeType":"VariableDeclaration","scope":2248,"src":"24450:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2240,"name":"address","nodeType":"ElementaryTypeName","src":"24450:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2243,"mutability":"mutable","name":"userData","nameLocation":"24489:8:23","nodeType":"VariableDeclaration","scope":2248,"src":"24474:23:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2242,"name":"bytes","nodeType":"ElementaryTypeName","src":"24474:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24337:166:23"},"returnParameters":{"id":2247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2246,"mutability":"mutable","name":"amountIn","nameLocation":"24530:8:23","nodeType":"VariableDeclaration","scope":2248,"src":"24522:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2245,"name":"uint256","nodeType":"ElementaryTypeName","src":"24522:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24521:18:23"},"scope":2249,"src":"24300:240:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2250,"src":"422:24120:23","usedErrors":[],"usedEvents":[]}],"src":"46:24497:23"},"id":23},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","exportedSymbols":{"ISwapFeePercentageBounds":[2265]},"id":2266,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2251,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"abstract":false,"baseContracts":[],"canonicalName":"ISwapFeePercentageBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":2252,"nodeType":"StructuredDocumentation","src":"72:1023:24","text":" @notice Return the minimum/maximum swap fee percentages for a pool.\n @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n that new pool developers think about and set these bounds according to their specific pool type.\n A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n LVR/MEV strategies, where a very high fee makes sense.\n Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n the highest value below 100% that satisfies the precision requirements."},"fullyImplemented":false,"id":2265,"linearizedBaseContracts":[2265],"name":"ISwapFeePercentageBounds","nameLocation":"1106:24:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2253,"nodeType":"StructuredDocumentation","src":"1137:79:24","text":"@return minimumSwapFeePercentage The minimum swap fee percentage for a pool"},"functionSelector":"ce20ece7","id":2258,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"1230:27:24","nodeType":"FunctionDefinition","parameters":{"id":2254,"nodeType":"ParameterList","parameters":[],"src":"1257:2:24"},"returnParameters":{"id":2257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2256,"mutability":"mutable","name":"minimumSwapFeePercentage","nameLocation":"1291:24:24","nodeType":"VariableDeclaration","scope":2258,"src":"1283:32:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2255,"name":"uint256","nodeType":"ElementaryTypeName","src":"1283:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1282:34:24"},"scope":2265,"src":"1221:96:24","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2259,"nodeType":"StructuredDocumentation","src":"1323:79:24","text":"@return maximumSwapFeePercentage The maximum swap fee percentage for a pool"},"functionSelector":"654cf15d","id":2264,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"1416:27:24","nodeType":"FunctionDefinition","parameters":{"id":2260,"nodeType":"ParameterList","parameters":[],"src":"1443:2:24"},"returnParameters":{"id":2263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2262,"mutability":"mutable","name":"maximumSwapFeePercentage","nameLocation":"1477:24:24","nodeType":"VariableDeclaration","scope":2264,"src":"1469:32:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2261,"name":"uint256","nodeType":"ElementaryTypeName","src":"1469:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1468:34:24"},"scope":2265,"src":"1407:96:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2266,"src":"1096:409:24","usedErrors":[],"usedEvents":[]}],"src":"46:1460:24"},"id":24},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","exportedSymbols":{"IUnbalancedLiquidityInvariantRatioBounds":[2281]},"id":2282,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2267,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"abstract":false,"baseContracts":[],"canonicalName":"IUnbalancedLiquidityInvariantRatioBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":2268,"nodeType":"StructuredDocumentation","src":"72:838:25","text":" @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n to their pool type's math.\n For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools."},"fullyImplemented":false,"id":2281,"linearizedBaseContracts":[2281],"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocation":"921:40:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2269,"nodeType":"StructuredDocumentation","src":"968:107:25","text":"@return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity"},"functionSelector":"b677fa56","id":2274,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"1089:24:25","nodeType":"FunctionDefinition","parameters":{"id":2270,"nodeType":"ParameterList","parameters":[],"src":"1113:2:25"},"returnParameters":{"id":2273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2272,"mutability":"mutable","name":"minimumInvariantRatio","nameLocation":"1147:21:25","nodeType":"VariableDeclaration","scope":2274,"src":"1139:29:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2271,"name":"uint256","nodeType":"ElementaryTypeName","src":"1139:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1138:31:25"},"scope":2281,"src":"1080:90:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2275,"nodeType":"StructuredDocumentation","src":"1176:104:25","text":"@return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity"},"functionSelector":"273c1adf","id":2280,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"1294:24:25","nodeType":"FunctionDefinition","parameters":{"id":2276,"nodeType":"ParameterList","parameters":[],"src":"1318:2:25"},"returnParameters":{"id":2279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2278,"mutability":"mutable","name":"maximumInvariantRatio","nameLocation":"1352:21:25","nodeType":"VariableDeclaration","scope":2280,"src":"1344:29:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2277,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1343:31:25"},"scope":2281,"src":"1285:90:25","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2282,"src":"911:466:25","usedErrors":[],"usedEvents":[]}],"src":"46:1332:25"},"id":25},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[81],"IVault":[2319],"IVaultAdmin":[2609],"IVaultErrors":[2976],"IVaultEvents":[3215],"IVaultExtension":[3634],"IVaultMain":[3770]},"id":2320,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2283,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:26"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":2285,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2320,"sourceUnit":82,"src":"72:80:26","symbolAliases":[{"foreign":{"id":2284,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"81:15:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":2287,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2320,"sourceUnit":3635,"src":"153:56:26","symbolAliases":[{"foreign":{"id":2286,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3634,"src":"162:15:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":2289,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2320,"sourceUnit":2977,"src":"210:50:26","symbolAliases":[{"foreign":{"id":2288,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"219:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":2291,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2320,"sourceUnit":3216,"src":"261:50:26","symbolAliases":[{"foreign":{"id":2290,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3215,"src":"270:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":2293,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2320,"sourceUnit":2610,"src":"312:48:26","symbolAliases":[{"foreign":{"id":2292,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2609,"src":"321:11:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":2295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2320,"sourceUnit":3771,"src":"361:46:26","symbolAliases":[{"foreign":{"id":2294,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3770,"src":"370:10:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2297,"name":"IVaultMain","nameLocations":["539:10:26"],"nodeType":"IdentifierPath","referencedDeclaration":3770,"src":"539:10:26"},"id":2298,"nodeType":"InheritanceSpecifier","src":"539:10:26"},{"baseName":{"id":2299,"name":"IVaultExtension","nameLocations":["551:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":3634,"src":"551:15:26"},"id":2300,"nodeType":"InheritanceSpecifier","src":"551:15:26"},{"baseName":{"id":2301,"name":"IVaultAdmin","nameLocations":["568:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":2609,"src":"568:11:26"},"id":2302,"nodeType":"InheritanceSpecifier","src":"568:11:26"},{"baseName":{"id":2303,"name":"IVaultErrors","nameLocations":["581:12:26"],"nodeType":"IdentifierPath","referencedDeclaration":2976,"src":"581:12:26"},"id":2304,"nodeType":"InheritanceSpecifier","src":"581:12:26"},{"baseName":{"id":2305,"name":"IVaultEvents","nameLocations":["595:12:26"],"nodeType":"IdentifierPath","referencedDeclaration":3215,"src":"595:12:26"},"id":2306,"nodeType":"InheritanceSpecifier","src":"595:12:26"},{"baseName":{"id":2307,"name":"IAuthentication","nameLocations":["609:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":81,"src":"609:15:26"},"id":2308,"nodeType":"InheritanceSpecifier","src":"609:15:26"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":2296,"nodeType":"StructuredDocumentation","src":"409:110:26","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2319,"linearizedBaseContracts":[2319,81,3215,2976,2609,3634,3770],"name":"IVault","nameLocation":"529:6:26","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[2337,3238],"documentation":{"id":2309,"nodeType":"StructuredDocumentation","src":"631:41:26","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":2318,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:26","nodeType":"FunctionDefinition","overrides":{"id":2313,"nodeType":"OverrideSpecifier","overrides":[{"id":2311,"name":"IVaultAdmin","nameLocations":["717:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":2609,"src":"717:11:26"},{"id":2312,"name":"IVaultExtension","nameLocations":["730:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":3634,"src":"730:15:26"}],"src":"708:38:26"},"parameters":{"id":2310,"nodeType":"ParameterList","parameters":[],"src":"691:2:26"},"returnParameters":{"id":2317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2318,"src":"756:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":2315,"nodeType":"UserDefinedTypeName","pathNode":{"id":2314,"name":"IVault","nameLocations":["756:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"756:6:26"},"referencedDeclaration":2319,"src":"756:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:26"},"scope":2319,"src":"677:87:26","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2320,"src":"519:247:26","usedErrors":[72,2621,2626,2631,2636,2645,2651,2654,2657,2660,2663,2666,2669,2678,2681,2684,2687,2690,2693,2696,2699,2702,2705,2708,2711,2714,2717,2720,2726,2733,2740,2743,2746,2756,2766,2773,2776,2779,2782,2792,2802,2809,2812,2815,2818,2821,2824,2827,2830,2833,2838,2843,2848,2851,2854,2857,2860,2863,2868,2873,2878,2884,2890,2893,2901,2907,2913,2916,2919,2922,2927,2937,2947,2954,2957,2960,2963,2966,2969,2972,2975],"usedEvents":[3014,3019,3038,3050,3062,3080,3098,3103,3106,3109,3116,3123,3130,3137,3144,3150,3156,3168,3178,3188,3200,3205,3214]}],"src":"46:721:26"},"id":26},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[1009],"IERC4626":[8902],"IProtocolFeeController":[1673],"IVault":[2319],"IVaultAdmin":[2609]},"id":2610,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2321,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:27"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":8903,"src":"72:75:27","symbolAliases":[{"foreign":{"id":2322,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"81:8:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":2325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":1674,"src":"149:70:27","symbolAliases":[{"foreign":{"id":2324,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"158:22:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":2327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":1010,"src":"220:48:27","symbolAliases":[{"foreign":{"id":2326,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1009,"src":"229:11:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":2320,"src":"269:38:27","symbolAliases":[{"foreign":{"id":2328,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"278:6:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":2330,"nodeType":"StructuredDocumentation","src":"309:276:27","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":2609,"linearizedBaseContracts":[2609],"name":"IVaultAdmin","nameLocation":"596:11:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2331,"nodeType":"StructuredDocumentation","src":"841:206:27","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":2337,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:27","nodeType":"FunctionDefinition","parameters":{"id":2332,"nodeType":"ParameterList","parameters":[],"src":"1066:2:27"},"returnParameters":{"id":2336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2337,"src":"1092:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":2334,"nodeType":"UserDefinedTypeName","pathNode":{"id":2333,"name":"IVault","nameLocations":["1092:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1092:6:27"},"referencedDeclaration":2319,"src":"1092:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:27"},"scope":2609,"src":"1052:48:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2338,"nodeType":"StructuredDocumentation","src":"1106:326:27","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":2343,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:27","nodeType":"FunctionDefinition","parameters":{"id":2339,"nodeType":"ParameterList","parameters":[],"src":"1467:2:27"},"returnParameters":{"id":2342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2341,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:27","nodeType":"VariableDeclaration","scope":2343,"src":"1493:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2340,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:27"},"scope":2609,"src":"1437:83:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2344,"nodeType":"StructuredDocumentation","src":"1526:414:27","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":2349,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:27","nodeType":"FunctionDefinition","parameters":{"id":2345,"nodeType":"ParameterList","parameters":[],"src":"1977:2:27"},"returnParameters":{"id":2348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2347,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:27","nodeType":"VariableDeclaration","scope":2349,"src":"2003:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2346,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:27"},"scope":2609,"src":"1945:87:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2350,"nodeType":"StructuredDocumentation","src":"2038:321:27","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":2355,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:27","nodeType":"FunctionDefinition","parameters":{"id":2351,"nodeType":"ParameterList","parameters":[],"src":"2395:2:27"},"returnParameters":{"id":2354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2353,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:27","nodeType":"VariableDeclaration","scope":2355,"src":"2421:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2352,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:27"},"scope":2609,"src":"2364:85:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2356,"nodeType":"StructuredDocumentation","src":"2455:193:27","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":2361,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:27","nodeType":"FunctionDefinition","parameters":{"id":2357,"nodeType":"ParameterList","parameters":[],"src":"2682:2:27"},"returnParameters":{"id":2360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2359,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:27","nodeType":"VariableDeclaration","scope":2361,"src":"2708:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2358,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:27"},"scope":2609,"src":"2653:74:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2362,"nodeType":"StructuredDocumentation","src":"2733:129:27","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":2367,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:27","nodeType":"FunctionDefinition","parameters":{"id":2363,"nodeType":"ParameterList","parameters":[],"src":"2896:2:27"},"returnParameters":{"id":2366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2365,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:27","nodeType":"VariableDeclaration","scope":2367,"src":"2922:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2364,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:27"},"scope":2609,"src":"2867:74:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2368,"nodeType":"StructuredDocumentation","src":"2947:439:27","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":2373,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:27","nodeType":"FunctionDefinition","parameters":{"id":2369,"nodeType":"ParameterList","parameters":[],"src":"3425:2:27"},"returnParameters":{"id":2372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2371,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:27","nodeType":"VariableDeclaration","scope":2373,"src":"3451:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2370,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:27"},"scope":2609,"src":"3391:92:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2374,"nodeType":"StructuredDocumentation","src":"3489:502:27","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":2379,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:27","nodeType":"FunctionDefinition","parameters":{"id":2375,"nodeType":"ParameterList","parameters":[],"src":"4032:2:27"},"returnParameters":{"id":2378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2377,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:27","nodeType":"VariableDeclaration","scope":2379,"src":"4058:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:27"},"scope":2609,"src":"3996:96:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2380,"nodeType":"StructuredDocumentation","src":"4098:291:27","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":2385,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:27","nodeType":"FunctionDefinition","parameters":{"id":2381,"nodeType":"ParameterList","parameters":[],"src":"4424:2:27"},"returnParameters":{"id":2384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2383,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:27","nodeType":"VariableDeclaration","scope":2385,"src":"4450:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2382,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:27"},"scope":2609,"src":"4394:84:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2386,"nodeType":"StructuredDocumentation","src":"4484:271:27","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":2391,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:27","nodeType":"FunctionDefinition","parameters":{"id":2387,"nodeType":"ParameterList","parameters":[],"src":"4789:2:27"},"returnParameters":{"id":2390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2389,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:27","nodeType":"VariableDeclaration","scope":2391,"src":"4815:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2388,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:27"},"scope":2609,"src":"4760:82:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2392,"nodeType":"StructuredDocumentation","src":"5069:529:27","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":2397,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:27","nodeType":"FunctionDefinition","parameters":{"id":2393,"nodeType":"ParameterList","parameters":[],"src":"5625:2:27"},"returnParameters":{"id":2396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2395,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:27","nodeType":"VariableDeclaration","scope":2397,"src":"5651:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2394,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:27"},"scope":2609,"src":"5603:66:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2398,"nodeType":"StructuredDocumentation","src":"5675:400:27","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":2407,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:27","nodeType":"FunctionDefinition","parameters":{"id":2399,"nodeType":"ParameterList","parameters":[],"src":"6108:2:27"},"returnParameters":{"id":2406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2401,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:27","nodeType":"VariableDeclaration","scope":2407,"src":"6158:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2400,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2403,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:27","nodeType":"VariableDeclaration","scope":2407,"src":"6176:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2402,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2405,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:27","nodeType":"VariableDeclaration","scope":2407,"src":"6208:31:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2404,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:27"},"scope":2609,"src":"6080:161:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2408,"nodeType":"StructuredDocumentation","src":"6247:517:27","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":2411,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:27","nodeType":"FunctionDefinition","parameters":{"id":2409,"nodeType":"ParameterList","parameters":[],"src":"6788:2:27"},"returnParameters":{"id":2410,"nodeType":"ParameterList","parameters":[],"src":"6799:0:27"},"scope":2609,"src":"6769:31:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2412,"nodeType":"StructuredDocumentation","src":"6806:569:27","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":2415,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:27","nodeType":"FunctionDefinition","parameters":{"id":2413,"nodeType":"ParameterList","parameters":[],"src":"7401:2:27"},"returnParameters":{"id":2414,"nodeType":"ParameterList","parameters":[],"src":"7412:0:27"},"scope":2609,"src":"7380:33:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2416,"nodeType":"StructuredDocumentation","src":"7639:276:27","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":2421,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:27","nodeType":"FunctionDefinition","parameters":{"id":2419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2418,"mutability":"mutable","name":"pool","nameLocation":"7947:4:27","nodeType":"VariableDeclaration","scope":2421,"src":"7939:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2417,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:27"},"returnParameters":{"id":2420,"nodeType":"ParameterList","parameters":[],"src":"7961:0:27"},"scope":2609,"src":"7920:42:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2422,"nodeType":"StructuredDocumentation","src":"7968:366:27","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":2427,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:27","nodeType":"FunctionDefinition","parameters":{"id":2425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2424,"mutability":"mutable","name":"pool","nameLocation":"8368:4:27","nodeType":"VariableDeclaration","scope":2427,"src":"8360:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2423,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:27"},"returnParameters":{"id":2426,"nodeType":"ParameterList","parameters":[],"src":"8382:0:27"},"scope":2609,"src":"8339:44:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2428,"nodeType":"StructuredDocumentation","src":"8606:520:27","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":2435,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:27","nodeType":"FunctionDefinition","parameters":{"id":2433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2430,"mutability":"mutable","name":"pool","nameLocation":"9175:4:27","nodeType":"VariableDeclaration","scope":2435,"src":"9167:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2429,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2432,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:27","nodeType":"VariableDeclaration","scope":2435,"src":"9181:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2431,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:27"},"returnParameters":{"id":2434,"nodeType":"ParameterList","parameters":[],"src":"9216:0:27"},"scope":2609,"src":"9131:86:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2436,"nodeType":"StructuredDocumentation","src":"9223:463:27","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":2447,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:27","nodeType":"FunctionDefinition","parameters":{"id":2439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2438,"mutability":"mutable","name":"pool","nameLocation":"9738:4:27","nodeType":"VariableDeclaration","scope":2447,"src":"9730:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2437,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:27"},"returnParameters":{"id":2446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2442,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:27","nodeType":"VariableDeclaration","scope":2447,"src":"9767:31:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2440,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2441,"nodeType":"ArrayTypeName","src":"9767:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2445,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:27","nodeType":"VariableDeclaration","scope":2447,"src":"9800:32:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2443,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2444,"nodeType":"ArrayTypeName","src":"9800:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:27"},"scope":2609,"src":"9691:143:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2448,"nodeType":"StructuredDocumentation","src":"9840:755:27","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":2455,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:27","nodeType":"FunctionDefinition","parameters":{"id":2453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2450,"mutability":"mutable","name":"pool","nameLocation":"10650:4:27","nodeType":"VariableDeclaration","scope":2455,"src":"10642:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2449,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2452,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:27","nodeType":"VariableDeclaration","scope":2455,"src":"10656:37:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2451,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:27"},"returnParameters":{"id":2454,"nodeType":"ParameterList","parameters":[],"src":"10703:0:27"},"scope":2609,"src":"10600:104:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2456,"nodeType":"StructuredDocumentation","src":"10710:760:27","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":2463,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:27","nodeType":"FunctionDefinition","parameters":{"id":2461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2458,"mutability":"mutable","name":"pool","nameLocation":"11526:4:27","nodeType":"VariableDeclaration","scope":2463,"src":"11518:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2457,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2460,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:27","nodeType":"VariableDeclaration","scope":2463,"src":"11532:38:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2459,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:27"},"returnParameters":{"id":2462,"nodeType":"ParameterList","parameters":[],"src":"11580:0:27"},"scope":2609,"src":"11475:106:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2464,"nodeType":"StructuredDocumentation","src":"11587:249:27","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":2470,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:27","nodeType":"FunctionDefinition","parameters":{"id":2468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2467,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:27","nodeType":"VariableDeclaration","scope":2470,"src":"11875:47:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":2466,"nodeType":"UserDefinedTypeName","pathNode":{"id":2465,"name":"IProtocolFeeController","nameLocations":["11875:22:27"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"11875:22:27"},"referencedDeclaration":1673,"src":"11875:22:27","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:27"},"returnParameters":{"id":2469,"nodeType":"ParameterList","parameters":[],"src":"11932:0:27"},"scope":2609,"src":"11841:92:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2471,"nodeType":"StructuredDocumentation","src":"12160:557:27","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":2476,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:27","nodeType":"FunctionDefinition","parameters":{"id":2474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2473,"mutability":"mutable","name":"pool","nameLocation":"12758:4:27","nodeType":"VariableDeclaration","scope":2476,"src":"12750:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2472,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:27"},"returnParameters":{"id":2475,"nodeType":"ParameterList","parameters":[],"src":"12772:0:27"},"scope":2609,"src":"12722:51:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2477,"nodeType":"StructuredDocumentation","src":"12779:409:27","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":2482,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:27","nodeType":"FunctionDefinition","parameters":{"id":2480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2479,"mutability":"mutable","name":"pool","nameLocation":"13230:4:27","nodeType":"VariableDeclaration","scope":2482,"src":"13222:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2478,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:27"},"returnParameters":{"id":2481,"nodeType":"ParameterList","parameters":[],"src":"13244:0:27"},"scope":2609,"src":"13193:52:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2483,"nodeType":"StructuredDocumentation","src":"13476:653:27","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":2486,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:27","nodeType":"FunctionDefinition","parameters":{"id":2484,"nodeType":"ParameterList","parameters":[],"src":"14155:2:27"},"returnParameters":{"id":2485,"nodeType":"ParameterList","parameters":[],"src":"14166:0:27"},"scope":2609,"src":"14134:33:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2487,"nodeType":"StructuredDocumentation","src":"14173:223:27","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":2490,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:27","nodeType":"FunctionDefinition","parameters":{"id":2488,"nodeType":"ParameterList","parameters":[],"src":"14433:2:27"},"returnParameters":{"id":2489,"nodeType":"ParameterList","parameters":[],"src":"14444:0:27"},"scope":2609,"src":"14401:44:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2491,"nodeType":"StructuredDocumentation","src":"14451:166:27","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":2494,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:27","nodeType":"FunctionDefinition","parameters":{"id":2492,"nodeType":"ParameterList","parameters":[],"src":"14642:2:27"},"returnParameters":{"id":2493,"nodeType":"ParameterList","parameters":[],"src":"14653:0:27"},"scope":2609,"src":"14622:32:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2495,"nodeType":"StructuredDocumentation","src":"14881:590:27","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":2500,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:27","nodeType":"FunctionDefinition","parameters":{"id":2496,"nodeType":"ParameterList","parameters":[],"src":"15501:2:27"},"returnParameters":{"id":2499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2498,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:27","nodeType":"VariableDeclaration","scope":2500,"src":"15527:18:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2497,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:27"},"scope":2609,"src":"15476:71:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2501,"nodeType":"StructuredDocumentation","src":"15553:619:27","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":2504,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:27","nodeType":"FunctionDefinition","parameters":{"id":2502,"nodeType":"ParameterList","parameters":[],"src":"16203:2:27"},"returnParameters":{"id":2503,"nodeType":"ParameterList","parameters":[],"src":"16214:0:27"},"scope":2609,"src":"16177:38:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2505,"nodeType":"StructuredDocumentation","src":"16221:545:27","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":2508,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:27","nodeType":"FunctionDefinition","parameters":{"id":2506,"nodeType":"ParameterList","parameters":[],"src":"16799:2:27"},"returnParameters":{"id":2507,"nodeType":"ParameterList","parameters":[],"src":"16810:0:27"},"scope":2609,"src":"16771:40:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2509,"nodeType":"StructuredDocumentation","src":"16817:860:27","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":2525,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:27","nodeType":"FunctionDefinition","parameters":{"id":2521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2512,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:27","nodeType":"VariableDeclaration","scope":2525,"src":"17717:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2511,"nodeType":"UserDefinedTypeName","pathNode":{"id":2510,"name":"IERC4626","nameLocations":["17717:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"17717:8:27"},"referencedDeclaration":8902,"src":"17717:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2514,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:27","nodeType":"VariableDeclaration","scope":2525,"src":"17748:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2513,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2516,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:27","nodeType":"VariableDeclaration","scope":2525,"src":"17785:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2515,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2518,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:27","nodeType":"VariableDeclaration","scope":2525,"src":"17819:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2517,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2520,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:27","nodeType":"VariableDeclaration","scope":2525,"src":"17852:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2519,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:27"},"returnParameters":{"id":2524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2523,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:27","nodeType":"VariableDeclaration","scope":2525,"src":"17896:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2522,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:27"},"scope":2609,"src":"17682:236:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2526,"nodeType":"StructuredDocumentation","src":"17924:1010:27","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":2544,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:27","nodeType":"FunctionDefinition","parameters":{"id":2538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2529,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:27","nodeType":"VariableDeclaration","scope":2544,"src":"18978:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2528,"nodeType":"UserDefinedTypeName","pathNode":{"id":2527,"name":"IERC4626","nameLocations":["18978:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"18978:8:27"},"referencedDeclaration":8902,"src":"18978:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2531,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:27","nodeType":"VariableDeclaration","scope":2544,"src":"19009:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2530,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2533,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:27","nodeType":"VariableDeclaration","scope":2544,"src":"19051:29:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2532,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2535,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:27","nodeType":"VariableDeclaration","scope":2544,"src":"19090:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2534,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2537,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:27","nodeType":"VariableDeclaration","scope":2544,"src":"19126:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2536,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:27"},"returnParameters":{"id":2543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2540,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:27","nodeType":"VariableDeclaration","scope":2544,"src":"19170:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2539,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2542,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:27","nodeType":"VariableDeclaration","scope":2544,"src":"19199:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2541,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:27"},"scope":2609,"src":"18939:286:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2545,"nodeType":"StructuredDocumentation","src":"19231:1458:27","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":2561,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:27","nodeType":"FunctionDefinition","parameters":{"id":2555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2548,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:27","nodeType":"VariableDeclaration","scope":2561,"src":"20738:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2547,"nodeType":"UserDefinedTypeName","pathNode":{"id":2546,"name":"IERC4626","nameLocations":["20738:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"20738:8:27"},"referencedDeclaration":8902,"src":"20738:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2550,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:27","nodeType":"VariableDeclaration","scope":2561,"src":"20769:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2549,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2552,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:27","nodeType":"VariableDeclaration","scope":2561,"src":"20801:33:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2551,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2554,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:27","nodeType":"VariableDeclaration","scope":2561,"src":"20844:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2553,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:27"},"returnParameters":{"id":2560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2557,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:27","nodeType":"VariableDeclaration","scope":2561,"src":"20899:35:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2556,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2559,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:27","nodeType":"VariableDeclaration","scope":2561,"src":"20936:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2558,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:27"},"scope":2609,"src":"20694:276:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2562,"nodeType":"StructuredDocumentation","src":"20976:382:27","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":2570,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:27","nodeType":"FunctionDefinition","parameters":{"id":2566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2565,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:27","nodeType":"VariableDeclaration","scope":2570,"src":"21387:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2564,"nodeType":"UserDefinedTypeName","pathNode":{"id":2563,"name":"IERC4626","nameLocations":["21387:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"21387:8:27"},"referencedDeclaration":8902,"src":"21387:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:27"},"returnParameters":{"id":2569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2568,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:27","nodeType":"VariableDeclaration","scope":2570,"src":"21433:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2567,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:27"},"scope":2609,"src":"21363:95:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2571,"nodeType":"StructuredDocumentation","src":"21464:441:27","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":2581,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:27","nodeType":"FunctionDefinition","parameters":{"id":2577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2574,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:27","nodeType":"VariableDeclaration","scope":2581,"src":"21949:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2573,"nodeType":"UserDefinedTypeName","pathNode":{"id":2572,"name":"IERC4626","nameLocations":["21949:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"21949:8:27"},"referencedDeclaration":8902,"src":"21949:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2576,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:27","nodeType":"VariableDeclaration","scope":2581,"src":"21980:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2575,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:27"},"returnParameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:27","nodeType":"VariableDeclaration","scope":2581,"src":"22032:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2578,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:27"},"scope":2609,"src":"21910:143:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2582,"nodeType":"StructuredDocumentation","src":"22059:281:27","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":2590,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:27","nodeType":"FunctionDefinition","parameters":{"id":2586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2585,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:27","nodeType":"VariableDeclaration","scope":2590,"src":"22375:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2584,"nodeType":"UserDefinedTypeName","pathNode":{"id":2583,"name":"IERC4626","nameLocations":["22375:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"22375:8:27"},"referencedDeclaration":8902,"src":"22375:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:27"},"returnParameters":{"id":2589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2588,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:27","nodeType":"VariableDeclaration","scope":2590,"src":"22421:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2587,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:27"},"scope":2609,"src":"22345:98:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2591,"nodeType":"StructuredDocumentation","src":"22449:521:27","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":2601,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:27","nodeType":"FunctionDefinition","parameters":{"id":2595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2594,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:27","nodeType":"VariableDeclaration","scope":2601,"src":"23010:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2593,"nodeType":"UserDefinedTypeName","pathNode":{"id":2592,"name":"IERC4626","nameLocations":["23010:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"23010:8:27"},"referencedDeclaration":8902,"src":"23010:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:27"},"returnParameters":{"id":2600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2597,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:27","nodeType":"VariableDeclaration","scope":2601,"src":"23061:28:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2596,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2599,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:27","nodeType":"VariableDeclaration","scope":2601,"src":"23091:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2598,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:27"},"scope":2609,"src":"22975:143:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2602,"nodeType":"StructuredDocumentation","src":"23342:202:27","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":2608,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:27","nodeType":"FunctionDefinition","parameters":{"id":2606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2605,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:27","nodeType":"VariableDeclaration","scope":2608,"src":"23572:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"},"typeName":{"id":2604,"nodeType":"UserDefinedTypeName","pathNode":{"id":2603,"name":"IAuthorizer","nameLocations":["23572:11:27"],"nodeType":"IdentifierPath","referencedDeclaration":1009,"src":"23572:11:27"},"referencedDeclaration":1009,"src":"23572:11:27","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:27"},"returnParameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"23607:0:27"},"scope":2609,"src":"23549:59:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2610,"src":"586:23024:27","usedErrors":[],"usedEvents":[]}],"src":"46:23565:27"},"id":27},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[9632],"IERC4626":[8902],"IVaultErrors":[2976]},"id":2977,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2611,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2613,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2977,"sourceUnit":8903,"src":"72:75:28","symbolAliases":[{"foreign":{"id":2612,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"81:8:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2615,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2977,"sourceUnit":9633,"src":"148:72:28","symbolAliases":[{"foreign":{"id":2614,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"157:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":2616,"nodeType":"StructuredDocumentation","src":"222:94:28","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":2976,"linearizedBaseContracts":[2976],"name":"IVaultErrors","nameLocation":"326:12:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2617,"nodeType":"StructuredDocumentation","src":"576:149:28","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":2621,"name":"PoolAlreadyRegistered","nameLocation":"736:21:28","nodeType":"ErrorDefinition","parameters":{"id":2620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2619,"mutability":"mutable","name":"pool","nameLocation":"766:4:28","nodeType":"VariableDeclaration","scope":2621,"src":"758:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2618,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:28"},"src":"730:42:28"},{"documentation":{"id":2622,"nodeType":"StructuredDocumentation","src":"778:149:28","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":2626,"name":"PoolAlreadyInitialized","nameLocation":"938:22:28","nodeType":"ErrorDefinition","parameters":{"id":2625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2624,"mutability":"mutable","name":"pool","nameLocation":"969:4:28","nodeType":"VariableDeclaration","scope":2626,"src":"961:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2623,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:28"},"src":"932:43:28"},{"documentation":{"id":2627,"nodeType":"StructuredDocumentation","src":"981:99:28","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":2631,"name":"PoolNotRegistered","nameLocation":"1091:17:28","nodeType":"ErrorDefinition","parameters":{"id":2630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2629,"mutability":"mutable","name":"pool","nameLocation":"1117:4:28","nodeType":"VariableDeclaration","scope":2631,"src":"1109:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2628,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:28"},"src":"1085:38:28"},{"documentation":{"id":2632,"nodeType":"StructuredDocumentation","src":"1129:112:28","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":2636,"name":"PoolNotInitialized","nameLocation":"1252:18:28","nodeType":"ErrorDefinition","parameters":{"id":2635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2634,"mutability":"mutable","name":"pool","nameLocation":"1279:4:28","nodeType":"VariableDeclaration","scope":2636,"src":"1271:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2633,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:28"},"src":"1246:39:28"},{"documentation":{"id":2637,"nodeType":"StructuredDocumentation","src":"1291:274:28","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":2645,"name":"HookRegistrationFailed","nameLocation":"1576:22:28","nodeType":"ErrorDefinition","parameters":{"id":2644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2639,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:28","nodeType":"VariableDeclaration","scope":2645,"src":"1599:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2638,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2641,"mutability":"mutable","name":"pool","nameLocation":"1634:4:28","nodeType":"VariableDeclaration","scope":2645,"src":"1626:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2640,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2643,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:28","nodeType":"VariableDeclaration","scope":2645,"src":"1640:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2642,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:28"},"src":"1570:91:28"},{"documentation":{"id":2646,"nodeType":"StructuredDocumentation","src":"1667:136:28","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":2651,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:28","nodeType":"ErrorDefinition","parameters":{"id":2650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2649,"mutability":"mutable","name":"token","nameLocation":"1844:5:28","nodeType":"VariableDeclaration","scope":2651,"src":"1837:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2648,"nodeType":"UserDefinedTypeName","pathNode":{"id":2647,"name":"IERC20","nameLocations":["1837:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1837:6:28"},"referencedDeclaration":9632,"src":"1837:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:28"},"src":"1808:43:28"},{"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"1857:57:28","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":2654,"name":"MinTokens","nameLocation":"1925:9:28","nodeType":"ErrorDefinition","parameters":{"id":2653,"nodeType":"ParameterList","parameters":[],"src":"1934:2:28"},"src":"1919:18:28"},{"documentation":{"id":2655,"nodeType":"StructuredDocumentation","src":"1943:57:28","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":2657,"name":"MaxTokens","nameLocation":"2011:9:28","nodeType":"ErrorDefinition","parameters":{"id":2656,"nodeType":"ParameterList","parameters":[],"src":"2020:2:28"},"src":"2005:18:28"},{"documentation":{"id":2658,"nodeType":"StructuredDocumentation","src":"2029:61:28","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":2660,"name":"InvalidToken","nameLocation":"2101:12:28","nodeType":"ErrorDefinition","parameters":{"id":2659,"nodeType":"ParameterList","parameters":[],"src":"2113:2:28"},"src":"2095:21:28"},{"documentation":{"id":2661,"nodeType":"StructuredDocumentation","src":"2122:86:28","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":2663,"name":"InvalidTokenType","nameLocation":"2219:16:28","nodeType":"ErrorDefinition","parameters":{"id":2662,"nodeType":"ParameterList","parameters":[],"src":"2235:2:28"},"src":"2213:25:28"},{"documentation":{"id":2664,"nodeType":"StructuredDocumentation","src":"2244:76:28","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":2666,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:28","nodeType":"ErrorDefinition","parameters":{"id":2665,"nodeType":"ParameterList","parameters":[],"src":"2356:2:28"},"src":"2325:34:28"},{"documentation":{"id":2667,"nodeType":"StructuredDocumentation","src":"2365:64:28","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":2669,"name":"InvalidTokenDecimals","nameLocation":"2440:20:28","nodeType":"ErrorDefinition","parameters":{"id":2668,"nodeType":"ParameterList","parameters":[],"src":"2460:2:28"},"src":"2434:29:28"},{"documentation":{"id":2670,"nodeType":"StructuredDocumentation","src":"2469:287:28","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":2678,"name":"TokensMismatch","nameLocation":"2767:14:28","nodeType":"ErrorDefinition","parameters":{"id":2677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2672,"mutability":"mutable","name":"pool","nameLocation":"2790:4:28","nodeType":"VariableDeclaration","scope":2678,"src":"2782:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2671,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2674,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:28","nodeType":"VariableDeclaration","scope":2678,"src":"2796:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2673,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2676,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:28","nodeType":"VariableDeclaration","scope":2678,"src":"2819:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2675,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:28"},"src":"2761:79:28"},{"documentation":{"id":2679,"nodeType":"StructuredDocumentation","src":"3071:85:28","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":2681,"name":"BalanceNotSettled","nameLocation":"3167:17:28","nodeType":"ErrorDefinition","parameters":{"id":2680,"nodeType":"ParameterList","parameters":[],"src":"3184:2:28"},"src":"3161:26:28"},{"documentation":{"id":2682,"nodeType":"StructuredDocumentation","src":"3193:97:28","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":2684,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:28","nodeType":"ErrorDefinition","parameters":{"id":2683,"nodeType":"ParameterList","parameters":[],"src":"3319:2:28"},"src":"3295:27:28"},{"documentation":{"id":2685,"nodeType":"StructuredDocumentation","src":"3328:105:28","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":2687,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:28","nodeType":"ErrorDefinition","parameters":{"id":2686,"nodeType":"ParameterList","parameters":[],"src":"3468:2:28"},"src":"3438:33:28"},{"documentation":{"id":2688,"nodeType":"StructuredDocumentation","src":"3477:105:28","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":2690,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:28","nodeType":"ErrorDefinition","parameters":{"id":2689,"nodeType":"ParameterList","parameters":[],"src":"3613:2:28"},"src":"3587:29:28"},{"documentation":{"id":2691,"nodeType":"StructuredDocumentation","src":"3622:104:28","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":2693,"name":"AfterSwapHookFailed","nameLocation":"3737:19:28","nodeType":"ErrorDefinition","parameters":{"id":2692,"nodeType":"ParameterList","parameters":[],"src":"3756:2:28"},"src":"3731:28:28"},{"documentation":{"id":2694,"nodeType":"StructuredDocumentation","src":"3765:111:28","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":2696,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:28","nodeType":"ErrorDefinition","parameters":{"id":2695,"nodeType":"ParameterList","parameters":[],"src":"3913:2:28"},"src":"3881:35:28"},{"documentation":{"id":2697,"nodeType":"StructuredDocumentation","src":"3922:110:28","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":2699,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:28","nodeType":"ErrorDefinition","parameters":{"id":2698,"nodeType":"ParameterList","parameters":[],"src":"4068:2:28"},"src":"4037:34:28"},{"documentation":{"id":2700,"nodeType":"StructuredDocumentation","src":"4077:113:28","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":2702,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:28","nodeType":"ErrorDefinition","parameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"4229:2:28"},"src":"4195:37:28"},{"documentation":{"id":2703,"nodeType":"StructuredDocumentation","src":"4238:112:28","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":2705,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:28","nodeType":"ErrorDefinition","parameters":{"id":2704,"nodeType":"ParameterList","parameters":[],"src":"4388:2:28"},"src":"4355:36:28"},{"documentation":{"id":2706,"nodeType":"StructuredDocumentation","src":"4397:116:28","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":2708,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:28","nodeType":"ErrorDefinition","parameters":{"id":2707,"nodeType":"ParameterList","parameters":[],"src":"4555:2:28"},"src":"4518:40:28"},{"documentation":{"id":2709,"nodeType":"StructuredDocumentation","src":"4564:115:28","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":2711,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:28","nodeType":"ErrorDefinition","parameters":{"id":2710,"nodeType":"ParameterList","parameters":[],"src":"4720:2:28"},"src":"4684:39:28"},{"documentation":{"id":2712,"nodeType":"StructuredDocumentation","src":"4729:115:28","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":2714,"name":"RouterNotTrusted","nameLocation":"4855:16:28","nodeType":"ErrorDefinition","parameters":{"id":2713,"nodeType":"ParameterList","parameters":[],"src":"4871:2:28"},"src":"4849:25:28"},{"documentation":{"id":2715,"nodeType":"StructuredDocumentation","src":"5097:47:28","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":2717,"name":"AmountGivenZero","nameLocation":"5155:15:28","nodeType":"ErrorDefinition","parameters":{"id":2716,"nodeType":"ParameterList","parameters":[],"src":"5170:2:28"},"src":"5149:24:28"},{"documentation":{"id":2718,"nodeType":"StructuredDocumentation","src":"5179:58:28","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":2720,"name":"CannotSwapSameToken","nameLocation":"5248:19:28","nodeType":"ErrorDefinition","parameters":{"id":2719,"nodeType":"ParameterList","parameters":[],"src":"5267:2:28"},"src":"5242:28:28"},{"documentation":{"id":2721,"nodeType":"StructuredDocumentation","src":"5276:137:28","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":2726,"name":"TokenNotRegistered","nameLocation":"5424:18:28","nodeType":"ErrorDefinition","parameters":{"id":2725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2724,"mutability":"mutable","name":"token","nameLocation":"5450:5:28","nodeType":"VariableDeclaration","scope":2726,"src":"5443:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2723,"nodeType":"UserDefinedTypeName","pathNode":{"id":2722,"name":"IERC20","nameLocations":["5443:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5443:6:28"},"referencedDeclaration":9632,"src":"5443:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:28"},"src":"5418:39:28"},{"documentation":{"id":2727,"nodeType":"StructuredDocumentation","src":"5463:215:28","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":2733,"name":"SwapLimit","nameLocation":"5689:9:28","nodeType":"ErrorDefinition","parameters":{"id":2732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2729,"mutability":"mutable","name":"amount","nameLocation":"5707:6:28","nodeType":"VariableDeclaration","scope":2733,"src":"5699:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2728,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2731,"mutability":"mutable","name":"limit","nameLocation":"5723:5:28","nodeType":"VariableDeclaration","scope":2733,"src":"5715:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2730,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:28"},"src":"5683:47:28"},{"documentation":{"id":2734,"nodeType":"StructuredDocumentation","src":"5736:228:28","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":2740,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:28","nodeType":"ErrorDefinition","parameters":{"id":2739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2736,"mutability":"mutable","name":"amount","nameLocation":"6005:6:28","nodeType":"VariableDeclaration","scope":2740,"src":"5997:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2735,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2738,"mutability":"mutable","name":"limit","nameLocation":"6021:5:28","nodeType":"VariableDeclaration","scope":2740,"src":"6013:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2737,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:28"},"src":"5969:59:28"},{"documentation":{"id":2741,"nodeType":"StructuredDocumentation","src":"6034:87:28","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":2743,"name":"TradeAmountTooSmall","nameLocation":"6132:19:28","nodeType":"ErrorDefinition","parameters":{"id":2742,"nodeType":"ParameterList","parameters":[],"src":"6151:2:28"},"src":"6126:28:28"},{"documentation":{"id":2744,"nodeType":"StructuredDocumentation","src":"6381:45:28","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":2746,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:28","nodeType":"ErrorDefinition","parameters":{"id":2745,"nodeType":"ParameterList","parameters":[],"src":"6460:2:28"},"src":"6431:32:28"},{"documentation":{"id":2747,"nodeType":"StructuredDocumentation","src":"6469:264:28","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":2756,"name":"AmountInAboveMax","nameLocation":"6744:16:28","nodeType":"ErrorDefinition","parameters":{"id":2755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2750,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:28","nodeType":"VariableDeclaration","scope":2756,"src":"6761:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2749,"nodeType":"UserDefinedTypeName","pathNode":{"id":2748,"name":"IERC20","nameLocations":["6761:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"6761:6:28"},"referencedDeclaration":9632,"src":"6761:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2752,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:28","nodeType":"VariableDeclaration","scope":2756,"src":"6777:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2751,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2754,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:28","nodeType":"VariableDeclaration","scope":2756,"src":"6795:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2753,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:28"},"src":"6738:78:28"},{"documentation":{"id":2757,"nodeType":"StructuredDocumentation","src":"6822:269:28","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":2766,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:28","nodeType":"ErrorDefinition","parameters":{"id":2765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2760,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:28","nodeType":"VariableDeclaration","scope":2766,"src":"7131:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2759,"nodeType":"UserDefinedTypeName","pathNode":{"id":2758,"name":"IERC20","nameLocations":["7131:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"7131:6:28"},"referencedDeclaration":9632,"src":"7131:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2762,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:28","nodeType":"VariableDeclaration","scope":2766,"src":"7147:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2761,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2764,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:28","nodeType":"VariableDeclaration","scope":2766,"src":"7165:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2763,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:28"},"src":"7096:90:28"},{"documentation":{"id":2767,"nodeType":"StructuredDocumentation","src":"7192:245:28","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":2773,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:28","nodeType":"ErrorDefinition","parameters":{"id":2772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2769,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:28","nodeType":"VariableDeclaration","scope":2773,"src":"7469:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2768,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2771,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:28","nodeType":"VariableDeclaration","scope":2773,"src":"7488:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2770,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:28"},"src":"7442:68:28"},{"documentation":{"id":2774,"nodeType":"StructuredDocumentation","src":"7516:75:28","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":2776,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:28","nodeType":"ErrorDefinition","parameters":{"id":2775,"nodeType":"ParameterList","parameters":[],"src":"7634:2:28"},"src":"7596:41:28"},{"documentation":{"id":2777,"nodeType":"StructuredDocumentation","src":"7643:68:28","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":2779,"name":"DoesNotSupportDonation","nameLocation":"7722:22:28","nodeType":"ErrorDefinition","parameters":{"id":2778,"nodeType":"ParameterList","parameters":[],"src":"7744:2:28"},"src":"7716:31:28"},{"documentation":{"id":2780,"nodeType":"StructuredDocumentation","src":"7977:48:28","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":2782,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:28","nodeType":"ErrorDefinition","parameters":{"id":2781,"nodeType":"ParameterList","parameters":[],"src":"8062:2:28"},"src":"8030:35:28"},{"documentation":{"id":2783,"nodeType":"StructuredDocumentation","src":"8071:269:28","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":2792,"name":"AmountOutBelowMin","nameLocation":"8351:17:28","nodeType":"ErrorDefinition","parameters":{"id":2791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2786,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:28","nodeType":"VariableDeclaration","scope":2792,"src":"8369:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2785,"nodeType":"UserDefinedTypeName","pathNode":{"id":2784,"name":"IERC20","nameLocations":["8369:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"8369:6:28"},"referencedDeclaration":9632,"src":"8369:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2788,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:28","nodeType":"VariableDeclaration","scope":2792,"src":"8386:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2787,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2790,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:28","nodeType":"VariableDeclaration","scope":2792,"src":"8405:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2789,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:28"},"src":"8345:82:28"},{"documentation":{"id":2793,"nodeType":"StructuredDocumentation","src":"8433:276:28","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":2802,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:28","nodeType":"ErrorDefinition","parameters":{"id":2801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2796,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:28","nodeType":"VariableDeclaration","scope":2802,"src":"8750:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":2795,"nodeType":"UserDefinedTypeName","pathNode":{"id":2794,"name":"IERC20","nameLocations":["8750:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"8750:6:28"},"referencedDeclaration":9632,"src":"8750:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2798,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:28","nodeType":"VariableDeclaration","scope":2802,"src":"8767:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2797,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2800,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:28","nodeType":"VariableDeclaration","scope":2802,"src":"8786:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2799,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:28"},"src":"8714:94:28"},{"documentation":{"id":2803,"nodeType":"StructuredDocumentation","src":"8814:228:28","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":2809,"name":"BptAmountInAboveMax","nameLocation":"9053:19:28","nodeType":"ErrorDefinition","parameters":{"id":2808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2805,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:28","nodeType":"VariableDeclaration","scope":2809,"src":"9073:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2804,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2807,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:28","nodeType":"VariableDeclaration","scope":2809,"src":"9091:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2806,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:28"},"src":"9047:65:28"},{"documentation":{"id":2810,"nodeType":"StructuredDocumentation","src":"9118:77:28","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":2812,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:28","nodeType":"ErrorDefinition","parameters":{"id":2811,"nodeType":"ParameterList","parameters":[],"src":"9241:2:28"},"src":"9200:44:28"},{"documentation":{"id":2813,"nodeType":"StructuredDocumentation","src":"9463:332:28","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":2815,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:28","nodeType":"ErrorDefinition","parameters":{"id":2814,"nodeType":"ParameterList","parameters":[],"src":"9838:2:28"},"src":"9800:41:28"},{"documentation":{"id":2816,"nodeType":"StructuredDocumentation","src":"9847:430:28","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":2818,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:28","nodeType":"ErrorDefinition","parameters":{"id":2817,"nodeType":"ParameterList","parameters":[],"src":"10311:2:28"},"src":"10282:32:28"},{"documentation":{"id":2819,"nodeType":"StructuredDocumentation","src":"10320:433:28","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":2821,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:28","nodeType":"ErrorDefinition","parameters":{"id":2820,"nodeType":"ParameterList","parameters":[],"src":"10788:2:28"},"src":"10758:33:28"},{"documentation":{"id":2822,"nodeType":"StructuredDocumentation","src":"10797:646:28","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":2824,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:28","nodeType":"ErrorDefinition","parameters":{"id":2823,"nodeType":"ParameterList","parameters":[],"src":"11473:2:28"},"src":"11448:28:28"},{"documentation":{"id":2825,"nodeType":"StructuredDocumentation","src":"11482:107:28","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":2827,"name":"PercentageAboveMax","nameLocation":"11600:18:28","nodeType":"ErrorDefinition","parameters":{"id":2826,"nodeType":"ParameterList","parameters":[],"src":"11618:2:28"},"src":"11594:27:28"},{"documentation":{"id":2828,"nodeType":"StructuredDocumentation","src":"11842:78:28","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":2830,"name":"QueriesDisabled","nameLocation":"11931:15:28","nodeType":"ErrorDefinition","parameters":{"id":2829,"nodeType":"ParameterList","parameters":[],"src":"11946:2:28"},"src":"11925:24:28"},{"documentation":{"id":2831,"nodeType":"StructuredDocumentation","src":"11955:84:28","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":2833,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:28","nodeType":"ErrorDefinition","parameters":{"id":2832,"nodeType":"ParameterList","parameters":[],"src":"12076:2:28"},"src":"12044:35:28"},{"documentation":{"id":2834,"nodeType":"StructuredDocumentation","src":"12302:104:28","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":2838,"name":"PoolInRecoveryMode","nameLocation":"12417:18:28","nodeType":"ErrorDefinition","parameters":{"id":2837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2836,"mutability":"mutable","name":"pool","nameLocation":"12444:4:28","nodeType":"VariableDeclaration","scope":2838,"src":"12436:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2835,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:28"},"src":"12411:39:28"},{"documentation":{"id":2839,"nodeType":"StructuredDocumentation","src":"12456:101:28","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":2843,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:28","nodeType":"ErrorDefinition","parameters":{"id":2842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2841,"mutability":"mutable","name":"pool","nameLocation":"12598:4:28","nodeType":"VariableDeclaration","scope":2843,"src":"12590:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2840,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:28"},"src":"12562:42:28"},{"documentation":{"id":2844,"nodeType":"StructuredDocumentation","src":"12828:206:28","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":2848,"name":"SenderIsNotVault","nameLocation":"13045:16:28","nodeType":"ErrorDefinition","parameters":{"id":2847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2846,"mutability":"mutable","name":"sender","nameLocation":"13070:6:28","nodeType":"VariableDeclaration","scope":2848,"src":"13062:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:28"},"src":"13039:39:28"},{"documentation":{"id":2849,"nodeType":"StructuredDocumentation","src":"13303:79:28","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":2851,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:28","nodeType":"ErrorDefinition","parameters":{"id":2850,"nodeType":"ParameterList","parameters":[],"src":"13425:2:28"},"src":"13387:41:28"},{"documentation":{"id":2852,"nodeType":"StructuredDocumentation","src":"13434:73:28","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":2854,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:28","nodeType":"ErrorDefinition","parameters":{"id":2853,"nodeType":"ParameterList","parameters":[],"src":"13551:2:28"},"src":"13512:42:28"},{"documentation":{"id":2855,"nodeType":"StructuredDocumentation","src":"13560:76:28","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":2857,"name":"VaultPaused","nameLocation":"13647:11:28","nodeType":"ErrorDefinition","parameters":{"id":2856,"nodeType":"ParameterList","parameters":[],"src":"13658:2:28"},"src":"13641:20:28"},{"documentation":{"id":2858,"nodeType":"StructuredDocumentation","src":"13667:73:28","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":2860,"name":"VaultNotPaused","nameLocation":"13751:14:28","nodeType":"ErrorDefinition","parameters":{"id":2859,"nodeType":"ParameterList","parameters":[],"src":"13765:2:28"},"src":"13745:23:28"},{"documentation":{"id":2861,"nodeType":"StructuredDocumentation","src":"13774:79:28","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":2863,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:28","nodeType":"ErrorDefinition","parameters":{"id":2862,"nodeType":"ParameterList","parameters":[],"src":"13887:2:28"},"src":"13858:32:28"},{"documentation":{"id":2864,"nodeType":"StructuredDocumentation","src":"13896:123:28","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":2868,"name":"PoolPaused","nameLocation":"14030:10:28","nodeType":"ErrorDefinition","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2866,"mutability":"mutable","name":"pool","nameLocation":"14049:4:28","nodeType":"VariableDeclaration","scope":2868,"src":"14041:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2865,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:28"},"src":"14024:31:28"},{"documentation":{"id":2869,"nodeType":"StructuredDocumentation","src":"14061:124:28","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":2873,"name":"PoolNotPaused","nameLocation":"14196:13:28","nodeType":"ErrorDefinition","parameters":{"id":2872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2871,"mutability":"mutable","name":"pool","nameLocation":"14218:4:28","nodeType":"VariableDeclaration","scope":2873,"src":"14210:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2870,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:28"},"src":"14190:34:28"},{"documentation":{"id":2874,"nodeType":"StructuredDocumentation","src":"14230:119:28","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":2878,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:28","nodeType":"ErrorDefinition","parameters":{"id":2877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2876,"mutability":"mutable","name":"pool","nameLocation":"14391:4:28","nodeType":"VariableDeclaration","scope":2878,"src":"14383:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2875,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:28"},"src":"14354:43:28"},{"documentation":{"id":2879,"nodeType":"StructuredDocumentation","src":"14628:163:28","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":2884,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:28","nodeType":"ErrorDefinition","parameters":{"id":2883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2882,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:28","nodeType":"VariableDeclaration","scope":2884,"src":"14827:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2881,"nodeType":"UserDefinedTypeName","pathNode":{"id":2880,"name":"IERC4626","nameLocations":["14827:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"14827:8:28"},"referencedDeclaration":8902,"src":"14827:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:28"},"src":"14796:54:28"},{"documentation":{"id":2885,"nodeType":"StructuredDocumentation","src":"14856:159:28","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":2890,"name":"BufferNotInitialized","nameLocation":"15026:20:28","nodeType":"ErrorDefinition","parameters":{"id":2889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2888,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:28","nodeType":"VariableDeclaration","scope":2890,"src":"15047:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2887,"nodeType":"UserDefinedTypeName","pathNode":{"id":2886,"name":"IERC4626","nameLocations":["15047:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"15047:8:28"},"referencedDeclaration":8902,"src":"15047:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:28"},"src":"15020:50:28"},{"documentation":{"id":2891,"nodeType":"StructuredDocumentation","src":"15076:90:28","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":2893,"name":"NotEnoughBufferShares","nameLocation":"15177:21:28","nodeType":"ErrorDefinition","parameters":{"id":2892,"nodeType":"ParameterList","parameters":[],"src":"15198:2:28"},"src":"15171:30:28"},{"documentation":{"id":2894,"nodeType":"StructuredDocumentation","src":"15207:436:28","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":2901,"name":"WrongUnderlyingToken","nameLocation":"15654:20:28","nodeType":"ErrorDefinition","parameters":{"id":2900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2897,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:28","nodeType":"VariableDeclaration","scope":2901,"src":"15675:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2896,"nodeType":"UserDefinedTypeName","pathNode":{"id":2895,"name":"IERC4626","nameLocations":["15675:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"15675:8:28"},"referencedDeclaration":8902,"src":"15675:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2899,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:28","nodeType":"VariableDeclaration","scope":2901,"src":"15698:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2898,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:28"},"src":"15648:75:28"},{"documentation":{"id":2902,"nodeType":"StructuredDocumentation","src":"15729:322:28","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":2907,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:28","nodeType":"ErrorDefinition","parameters":{"id":2906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2905,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:28","nodeType":"VariableDeclaration","scope":2907,"src":"16085:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2904,"nodeType":"UserDefinedTypeName","pathNode":{"id":2903,"name":"IERC4626","nameLocations":["16085:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"16085:8:28"},"referencedDeclaration":8902,"src":"16085:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:28"},"src":"16056:52:28"},{"documentation":{"id":2908,"nodeType":"StructuredDocumentation","src":"16114:183:28","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":2913,"name":"WrapAmountTooSmall","nameLocation":"16308:18:28","nodeType":"ErrorDefinition","parameters":{"id":2912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2911,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:28","nodeType":"VariableDeclaration","scope":2913,"src":"16327:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2910,"nodeType":"UserDefinedTypeName","pathNode":{"id":2909,"name":"IERC4626","nameLocations":["16327:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"16327:8:28"},"referencedDeclaration":8902,"src":"16327:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:28"},"src":"16302:48:28"},{"documentation":{"id":2914,"nodeType":"StructuredDocumentation","src":"16356:70:28","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":2916,"name":"VaultBuffersArePaused","nameLocation":"16437:21:28","nodeType":"ErrorDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[],"src":"16458:2:28"},"src":"16431:30:28"},{"documentation":{"id":2917,"nodeType":"StructuredDocumentation","src":"16467:58:28","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":2919,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:28","nodeType":"ErrorDefinition","parameters":{"id":2918,"nodeType":"ParameterList","parameters":[],"src":"16563:2:28"},"src":"16530:36:28"},{"documentation":{"id":2920,"nodeType":"StructuredDocumentation","src":"16572:60:28","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":2922,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:28","nodeType":"ErrorDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[],"src":"16667:2:28"},"src":"16637:33:28"},{"documentation":{"id":2923,"nodeType":"StructuredDocumentation","src":"16676:173:28","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":2927,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:28","nodeType":"ErrorDefinition","parameters":{"id":2926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2925,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:28","nodeType":"VariableDeclaration","scope":2927,"src":"16884:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2924,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:28"},"src":"16854:51:28"},{"documentation":{"id":2928,"nodeType":"StructuredDocumentation","src":"16911:97:28","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":2937,"name":"NotEnoughUnderlying","nameLocation":"17019:19:28","nodeType":"ErrorDefinition","parameters":{"id":2936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2931,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:28","nodeType":"VariableDeclaration","scope":2937,"src":"17039:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2930,"nodeType":"UserDefinedTypeName","pathNode":{"id":2929,"name":"IERC4626","nameLocations":["17039:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"17039:8:28"},"referencedDeclaration":8902,"src":"17039:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2933,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:28","nodeType":"VariableDeclaration","scope":2937,"src":"17062:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2932,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2935,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:28","nodeType":"VariableDeclaration","scope":2937,"src":"17096:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2934,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:28"},"src":"17013:115:28"},{"documentation":{"id":2938,"nodeType":"StructuredDocumentation","src":"17134:94:28","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":2947,"name":"NotEnoughWrapped","nameLocation":"17239:16:28","nodeType":"ErrorDefinition","parameters":{"id":2946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2941,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:28","nodeType":"VariableDeclaration","scope":2947,"src":"17256:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":2940,"nodeType":"UserDefinedTypeName","pathNode":{"id":2939,"name":"IERC4626","nameLocations":["17256:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"17256:8:28"},"referencedDeclaration":8902,"src":"17256:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2943,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:28","nodeType":"VariableDeclaration","scope":2947,"src":"17279:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2942,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2945,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:28","nodeType":"VariableDeclaration","scope":2947,"src":"17310:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2944,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:28"},"src":"17233:106:28"},{"documentation":{"id":2948,"nodeType":"StructuredDocumentation","src":"17345:76:28","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":2954,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:28","nodeType":"ErrorDefinition","parameters":{"id":2953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2950,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:28","nodeType":"VariableDeclaration","scope":2954,"src":"17453:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2949,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2952,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:28","nodeType":"VariableDeclaration","scope":2954,"src":"17475:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2951,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:28"},"src":"17426:74:28"},{"documentation":{"id":2955,"nodeType":"StructuredDocumentation","src":"17727:87:28","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":2957,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:28","nodeType":"ErrorDefinition","parameters":{"id":2956,"nodeType":"ParameterList","parameters":[],"src":"17858:2:28"},"src":"17819:42:28"},{"documentation":{"id":2958,"nodeType":"StructuredDocumentation","src":"17867:48:28","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":2960,"name":"CannotReceiveEth","nameLocation":"17926:16:28","nodeType":"ErrorDefinition","parameters":{"id":2959,"nodeType":"ParameterList","parameters":[],"src":"17942:2:28"},"src":"17920:25:28"},{"documentation":{"id":2961,"nodeType":"StructuredDocumentation","src":"17951:156:28","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":2963,"name":"NotVaultDelegateCall","nameLocation":"18118:20:28","nodeType":"ErrorDefinition","parameters":{"id":2962,"nodeType":"ParameterList","parameters":[],"src":"18138:2:28"},"src":"18112:29:28"},{"documentation":{"id":2964,"nodeType":"StructuredDocumentation","src":"18147:89:28","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":2966,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:28","nodeType":"ErrorDefinition","parameters":{"id":2965,"nodeType":"ParameterList","parameters":[],"src":"18276:2:28"},"src":"18241:38:28"},{"documentation":{"id":2967,"nodeType":"StructuredDocumentation","src":"18285:96:28","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":2969,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:28","nodeType":"ErrorDefinition","parameters":{"id":2968,"nodeType":"ParameterList","parameters":[],"src":"18428:2:28"},"src":"18386:45:28"},{"documentation":{"id":2970,"nodeType":"StructuredDocumentation","src":"18437:85:28","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":2972,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:28","nodeType":"ErrorDefinition","parameters":{"id":2971,"nodeType":"ParameterList","parameters":[],"src":"18558:2:28"},"src":"18527:34:28"},{"documentation":{"id":2973,"nodeType":"StructuredDocumentation","src":"18567:54:28","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":2975,"name":"QuoteResultSpoofed","nameLocation":"18632:18:28","nodeType":"ErrorDefinition","parameters":{"id":2974,"nodeType":"ParameterList","parameters":[],"src":"18650:2:28"},"src":"18626:27:28"}],"scope":2977,"src":"316:18339:28","usedErrors":[2621,2626,2631,2636,2645,2651,2654,2657,2660,2663,2666,2669,2678,2681,2684,2687,2690,2693,2696,2699,2702,2705,2708,2711,2714,2717,2720,2726,2733,2740,2743,2746,2756,2766,2773,2776,2779,2782,2792,2802,2809,2812,2815,2818,2821,2824,2827,2830,2833,2838,2843,2848,2851,2854,2857,2860,2863,2868,2873,2878,2884,2890,2893,2901,2907,2913,2916,2919,2922,2927,2937,2947,2954,2957,2960,2963,2966,2969,2972,2975],"usedEvents":[]}],"src":"46:18610:28"},"id":28},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[4015],"AddLiquidityParams":[4031],"AfterSwapParams":[4009],"BufferWrapOrUnwrapParams":[4070],"FEE_BITLENGTH":[4073],"FEE_SCALING_FACTOR":[4076],"HookFlags":[3835],"HooksConfig":[3859],"IAuthorizer":[1009],"IERC20":[9632],"IERC4626":[8902],"IHooks":[1335],"IProtocolFeeController":[1673],"IRateProvider":[91],"IVaultEvents":[3215],"LiquidityManagement":[3788],"MAX_FEE_PERCENTAGE":[4079],"PoolConfig":[3813],"PoolConfigBits":[3790],"PoolData":[3937],"PoolRoleAccounts":[3885],"PoolSwapParams":[3980],"RemoveLiquidityKind":[4036],"RemoveLiquidityParams":[4052],"Rounding":[3940],"SwapKind":[3943],"SwapState":[3869],"TokenConfig":[3902],"TokenInfo":[3912],"TokenType":[3889],"VaultState":[3877],"VaultSwapParams":[3962],"WrappingDirection":[4055]},"id":3216,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2978,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2980,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3216,"sourceUnit":8903,"src":"72:75:29","symbolAliases":[{"foreign":{"id":2979,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"81:8:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2982,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3216,"sourceUnit":9633,"src":"148:72:29","symbolAliases":[{"foreign":{"id":2981,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"157:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":2984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3216,"sourceUnit":1674,"src":"222:70:29","symbolAliases":[{"foreign":{"id":2983,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"231:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":2986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3216,"sourceUnit":1010,"src":"293:48:29","symbolAliases":[{"foreign":{"id":2985,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1009,"src":"302:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":2988,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3216,"sourceUnit":1336,"src":"342:38:29","symbolAliases":[{"foreign":{"id":2987,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1335,"src":"351:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3216,"sourceUnit":4080,"src":"381:26:29","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":2990,"nodeType":"StructuredDocumentation","src":"409:91:29","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3215,"linearizedBaseContracts":[3215],"name":"IVaultEvents","nameLocation":"510:12:29","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2991,"nodeType":"StructuredDocumentation","src":"529:657:29","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":3014,"name":"PoolRegistered","nameLocation":"1197:14:29","nodeType":"EventDefinition","parameters":{"id":3013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2993,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:29","nodeType":"VariableDeclaration","scope":3014,"src":"1221:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2992,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2995,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:29","nodeType":"VariableDeclaration","scope":3014,"src":"1251:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2994,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2999,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:29","nodeType":"VariableDeclaration","scope":3014,"src":"1284:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$3902_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":2997,"nodeType":"UserDefinedTypeName","pathNode":{"id":2996,"name":"TokenConfig","nameLocations":["1284:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":3902,"src":"1284:11:29"},"referencedDeclaration":3902,"src":"1284:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$3902_storage_ptr","typeString":"struct TokenConfig"}},"id":2998,"nodeType":"ArrayTypeName","src":"1284:13:29","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$3902_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3001,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:29","nodeType":"VariableDeclaration","scope":3014,"src":"1319:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3000,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3003,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:29","nodeType":"VariableDeclaration","scope":3014,"src":"1354:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3002,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:29","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3006,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:29","nodeType":"VariableDeclaration","scope":3014,"src":"1389:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3005,"nodeType":"UserDefinedTypeName","pathNode":{"id":3004,"name":"PoolRoleAccounts","nameLocations":["1389:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":3885,"src":"1389:16:29"},"referencedDeclaration":3885,"src":"1389:16:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3009,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:29","nodeType":"VariableDeclaration","scope":3014,"src":"1428:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$3859_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3008,"nodeType":"UserDefinedTypeName","pathNode":{"id":3007,"name":"HooksConfig","nameLocations":["1428:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":3859,"src":"1428:11:29"},"referencedDeclaration":3859,"src":"1428:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$3859_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":3012,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:29","nodeType":"VariableDeclaration","scope":3014,"src":"1461:39:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3011,"nodeType":"UserDefinedTypeName","pathNode":{"id":3010,"name":"LiquidityManagement","nameLocations":["1461:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":3788,"src":"1461:19:29"},"referencedDeclaration":3788,"src":"1461:19:29","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:29"},"src":"1191:316:29"},{"anonymous":false,"documentation":{"id":3015,"nodeType":"StructuredDocumentation","src":"1513:120:29","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":3019,"name":"PoolInitialized","nameLocation":"1644:15:29","nodeType":"EventDefinition","parameters":{"id":3018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3017,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:29","nodeType":"VariableDeclaration","scope":3019,"src":"1660:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3016,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:29"},"src":"1638:44:29"},{"anonymous":false,"documentation":{"id":3020,"nodeType":"StructuredDocumentation","src":"1688:478:29","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":3038,"name":"Swap","nameLocation":"2177:4:29","nodeType":"EventDefinition","parameters":{"id":3037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3022,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:29","nodeType":"VariableDeclaration","scope":3038,"src":"2191:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3021,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3025,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:29","nodeType":"VariableDeclaration","scope":3038,"src":"2221:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3024,"nodeType":"UserDefinedTypeName","pathNode":{"id":3023,"name":"IERC20","nameLocations":["2221:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2221:6:29"},"referencedDeclaration":9632,"src":"2221:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3028,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:29","nodeType":"VariableDeclaration","scope":3038,"src":"2253:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3027,"nodeType":"UserDefinedTypeName","pathNode":{"id":3026,"name":"IERC20","nameLocations":["2253:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2253:6:29"},"referencedDeclaration":9632,"src":"2253:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3030,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:29","nodeType":"VariableDeclaration","scope":3038,"src":"2286:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3029,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3032,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:29","nodeType":"VariableDeclaration","scope":3038,"src":"2312:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3031,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3034,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:29","nodeType":"VariableDeclaration","scope":3038,"src":"2339:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3033,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3036,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:29","nodeType":"VariableDeclaration","scope":3038,"src":"2374:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3035,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:29"},"src":"2171:231:29"},{"anonymous":false,"documentation":{"id":3039,"nodeType":"StructuredDocumentation","src":"2408:352:29","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":3050,"name":"Wrap","nameLocation":"2771:4:29","nodeType":"EventDefinition","parameters":{"id":3049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3042,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:29","nodeType":"VariableDeclaration","scope":3050,"src":"2785:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3041,"nodeType":"UserDefinedTypeName","pathNode":{"id":3040,"name":"IERC4626","nameLocations":["2785:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"2785:8:29"},"referencedDeclaration":8902,"src":"2785:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3044,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:29","nodeType":"VariableDeclaration","scope":3050,"src":"2824:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3043,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3046,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:29","nodeType":"VariableDeclaration","scope":3050,"src":"2861:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3045,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3048,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:29","nodeType":"VariableDeclaration","scope":3050,"src":"2891:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3047,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:29"},"src":"2765:155:29"},{"anonymous":false,"documentation":{"id":3051,"nodeType":"StructuredDocumentation","src":"2926:355:29","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":3062,"name":"Unwrap","nameLocation":"3292:6:29","nodeType":"EventDefinition","parameters":{"id":3061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3054,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:29","nodeType":"VariableDeclaration","scope":3062,"src":"3308:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3053,"nodeType":"UserDefinedTypeName","pathNode":{"id":3052,"name":"IERC4626","nameLocations":["3308:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"3308:8:29"},"referencedDeclaration":8902,"src":"3308:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3056,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:29","nodeType":"VariableDeclaration","scope":3062,"src":"3347:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3055,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3058,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:29","nodeType":"VariableDeclaration","scope":3062,"src":"3377:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3057,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3060,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:29","nodeType":"VariableDeclaration","scope":3062,"src":"3414:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3059,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:29"},"src":"3286:157:29"},{"anonymous":false,"documentation":{"id":3063,"nodeType":"StructuredDocumentation","src":"3449:562:29","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":3080,"name":"LiquidityAdded","nameLocation":"4022:14:29","nodeType":"EventDefinition","parameters":{"id":3079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3065,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:29","nodeType":"VariableDeclaration","scope":3080,"src":"4046:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3064,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3067,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:29","nodeType":"VariableDeclaration","scope":3080,"src":"4076:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3070,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:29","nodeType":"VariableDeclaration","scope":3080,"src":"4119:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"},"typeName":{"id":3069,"nodeType":"UserDefinedTypeName","pathNode":{"id":3068,"name":"AddLiquidityKind","nameLocations":["4119:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4015,"src":"4119:16:29"},"referencedDeclaration":4015,"src":"4119:16:29","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3072,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:29","nodeType":"VariableDeclaration","scope":3080,"src":"4158:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3071,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3075,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:29","nodeType":"VariableDeclaration","scope":3080,"src":"4187:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3073,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3074,"nodeType":"ArrayTypeName","src":"4187:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3078,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:29","nodeType":"VariableDeclaration","scope":3080,"src":"4222:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3076,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3077,"nodeType":"ArrayTypeName","src":"4222:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:29"},"src":"4016:240:29"},{"anonymous":false,"documentation":{"id":3081,"nodeType":"StructuredDocumentation","src":"4262:548:29","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":3098,"name":"LiquidityRemoved","nameLocation":"4821:16:29","nodeType":"EventDefinition","parameters":{"id":3097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3083,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:29","nodeType":"VariableDeclaration","scope":3098,"src":"4847:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3082,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3085,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:29","nodeType":"VariableDeclaration","scope":3098,"src":"4877:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3084,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3088,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:29","nodeType":"VariableDeclaration","scope":3098,"src":"4920:32:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":3087,"nodeType":"UserDefinedTypeName","pathNode":{"id":3086,"name":"RemoveLiquidityKind","nameLocations":["4920:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":4036,"src":"4920:19:29"},"referencedDeclaration":4036,"src":"4920:19:29","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3090,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:29","nodeType":"VariableDeclaration","scope":3098,"src":"4962:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3093,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:29","nodeType":"VariableDeclaration","scope":3098,"src":"4991:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3091,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3092,"nodeType":"ArrayTypeName","src":"4991:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3096,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:29","nodeType":"VariableDeclaration","scope":3098,"src":"5028:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3094,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3095,"nodeType":"ArrayTypeName","src":"5028:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:29"},"src":"4815:247:29"},{"anonymous":false,"documentation":{"id":3099,"nodeType":"StructuredDocumentation","src":"5068:114:29","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":3103,"name":"VaultPausedStateChanged","nameLocation":"5193:23:29","nodeType":"EventDefinition","parameters":{"id":3102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3101,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:29","nodeType":"VariableDeclaration","scope":3103,"src":"5217:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3100,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:29"},"src":"5187:43:29"},{"anonymous":false,"documentation":{"id":3104,"nodeType":"StructuredDocumentation","src":"5236:87:29","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":3106,"name":"VaultQueriesDisabled","nameLocation":"5334:20:29","nodeType":"EventDefinition","parameters":{"id":3105,"nodeType":"ParameterList","parameters":[],"src":"5354:2:29"},"src":"5328:29:29"},{"anonymous":false,"documentation":{"id":3107,"nodeType":"StructuredDocumentation","src":"5363:85:29","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":3109,"name":"VaultQueriesEnabled","nameLocation":"5459:19:29","nodeType":"EventDefinition","parameters":{"id":3108,"nodeType":"ParameterList","parameters":[],"src":"5478:2:29"},"src":"5453:28:29"},{"anonymous":false,"documentation":{"id":3110,"nodeType":"StructuredDocumentation","src":"5487:171:29","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":3116,"name":"PoolPausedStateChanged","nameLocation":"5669:22:29","nodeType":"EventDefinition","parameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3112,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:29","nodeType":"VariableDeclaration","scope":3116,"src":"5692:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3111,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3114,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:29","nodeType":"VariableDeclaration","scope":3116,"src":"5714:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3113,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:29"},"src":"5663:64:29"},{"anonymous":false,"documentation":{"id":3117,"nodeType":"StructuredDocumentation","src":"5733:158:29","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":3123,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:29","nodeType":"EventDefinition","parameters":{"id":3122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3119,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:29","nodeType":"VariableDeclaration","scope":3123,"src":"5927:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3118,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3121,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:29","nodeType":"VariableDeclaration","scope":3123,"src":"5949:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3120,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:29"},"src":"5896:80:29"},{"anonymous":false,"documentation":{"id":3124,"nodeType":"StructuredDocumentation","src":"5982:170:29","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":3130,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:29","nodeType":"EventDefinition","parameters":{"id":3129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3126,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:29","nodeType":"VariableDeclaration","scope":3130,"src":"6192:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3125,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3128,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:29","nodeType":"VariableDeclaration","scope":3130,"src":"6214:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3127,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:29"},"src":"6157:76:29"},{"anonymous":false,"documentation":{"id":3131,"nodeType":"StructuredDocumentation","src":"6239:353:29","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":3137,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:29","nodeType":"EventDefinition","parameters":{"id":3136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3133,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:29","nodeType":"VariableDeclaration","scope":3137,"src":"6637:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3132,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3135,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:29","nodeType":"VariableDeclaration","scope":3137,"src":"6659:34:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3134,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:29"},"src":"6597:98:29"},{"anonymous":false,"documentation":{"id":3138,"nodeType":"StructuredDocumentation","src":"6701:357:29","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":3144,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:29","nodeType":"EventDefinition","parameters":{"id":3143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3140,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:29","nodeType":"VariableDeclaration","scope":3144,"src":"7104:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3139,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3142,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:29","nodeType":"VariableDeclaration","scope":3144,"src":"7126:35:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3141,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:29"},"src":"7063:100:29"},{"anonymous":false,"documentation":{"id":3145,"nodeType":"StructuredDocumentation","src":"7169:132:29","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":3150,"name":"AuthorizerChanged","nameLocation":"7312:17:29","nodeType":"EventDefinition","parameters":{"id":3149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3148,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:29","nodeType":"VariableDeclaration","scope":3150,"src":"7330:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"},"typeName":{"id":3147,"nodeType":"UserDefinedTypeName","pathNode":{"id":3146,"name":"IAuthorizer","nameLocations":["7330:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":1009,"src":"7330:11:29"},"referencedDeclaration":1009,"src":"7330:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:29"},"src":"7306:59:29"},{"anonymous":false,"documentation":{"id":3151,"nodeType":"StructuredDocumentation","src":"7371:180:29","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":3156,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:29","nodeType":"EventDefinition","parameters":{"id":3155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3154,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:29","nodeType":"VariableDeclaration","scope":3156,"src":"7591:55:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":3153,"nodeType":"UserDefinedTypeName","pathNode":{"id":3152,"name":"IProtocolFeeController","nameLocations":["7591:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"7591:22:29"},"referencedDeclaration":1673,"src":"7591:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:29"},"src":"7556:92:29"},{"anonymous":false,"documentation":{"id":3157,"nodeType":"StructuredDocumentation","src":"7654:553:29","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":3168,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:29","nodeType":"EventDefinition","parameters":{"id":3167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3160,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:29","nodeType":"VariableDeclaration","scope":3168,"src":"8250:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3159,"nodeType":"UserDefinedTypeName","pathNode":{"id":3158,"name":"IERC4626","nameLocations":["8250:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"8250:8:29"},"referencedDeclaration":8902,"src":"8250:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3162,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:29","nodeType":"VariableDeclaration","scope":3168,"src":"8289:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3161,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3164,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:29","nodeType":"VariableDeclaration","scope":3168,"src":"8323:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3163,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3166,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:29","nodeType":"VariableDeclaration","scope":3168,"src":"8354:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3165,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:29"},"src":"8212:171:29"},{"anonymous":false,"documentation":{"id":3169,"nodeType":"StructuredDocumentation","src":"8389:570:29","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":3178,"name":"BufferSharesMinted","nameLocation":"8970:18:29","nodeType":"EventDefinition","parameters":{"id":3177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3172,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:29","nodeType":"VariableDeclaration","scope":3178,"src":"8989:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3171,"nodeType":"UserDefinedTypeName","pathNode":{"id":3170,"name":"IERC4626","nameLocations":["8989:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"8989:8:29"},"referencedDeclaration":8902,"src":"8989:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3174,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:29","nodeType":"VariableDeclaration","scope":3178,"src":"9020:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3173,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3176,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:29","nodeType":"VariableDeclaration","scope":3178,"src":"9040:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3175,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:29"},"src":"8964:98:29"},{"anonymous":false,"documentation":{"id":3179,"nodeType":"StructuredDocumentation","src":"9068:571:29","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":3188,"name":"BufferSharesBurned","nameLocation":"9650:18:29","nodeType":"EventDefinition","parameters":{"id":3187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3182,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:29","nodeType":"VariableDeclaration","scope":3188,"src":"9669:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3181,"nodeType":"UserDefinedTypeName","pathNode":{"id":3180,"name":"IERC4626","nameLocations":["9669:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"9669:8:29"},"referencedDeclaration":8902,"src":"9669:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3184,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:29","nodeType":"VariableDeclaration","scope":3188,"src":"9700:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3183,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3186,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:29","nodeType":"VariableDeclaration","scope":3188,"src":"9722:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3185,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:29"},"src":"9644:100:29"},{"anonymous":false,"documentation":{"id":3189,"nodeType":"StructuredDocumentation","src":"9750:509:29","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":3200,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:29","nodeType":"EventDefinition","parameters":{"id":3199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3192,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:29","nodeType":"VariableDeclaration","scope":3200,"src":"10306:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3191,"nodeType":"UserDefinedTypeName","pathNode":{"id":3190,"name":"IERC4626","nameLocations":["10306:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"10306:8:29"},"referencedDeclaration":8902,"src":"10306:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3194,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:29","nodeType":"VariableDeclaration","scope":3200,"src":"10345:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3193,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3196,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:29","nodeType":"VariableDeclaration","scope":3200,"src":"10379:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3195,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3198,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:29","nodeType":"VariableDeclaration","scope":3200,"src":"10410:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3197,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:29"},"src":"10264:175:29"},{"anonymous":false,"documentation":{"id":3201,"nodeType":"StructuredDocumentation","src":"10445:278:29","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":3205,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:29","nodeType":"EventDefinition","parameters":{"id":3204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3203,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:29","nodeType":"VariableDeclaration","scope":3205,"src":"10765:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3202,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:29"},"src":"10728:50:29"},{"anonymous":false,"documentation":{"id":3206,"nodeType":"StructuredDocumentation","src":"10784:194:29","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":3214,"name":"VaultAuxiliary","nameLocation":"10989:14:29","nodeType":"EventDefinition","parameters":{"id":3213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3208,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:29","nodeType":"VariableDeclaration","scope":3214,"src":"11004:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3207,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3210,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:29","nodeType":"VariableDeclaration","scope":3214,"src":"11026:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3209,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3212,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:29","nodeType":"VariableDeclaration","scope":3214,"src":"11052:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3211,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:29"},"src":"10983:86:29"}],"scope":3216,"src":"500:10571:29","usedErrors":[],"usedEvents":[3014,3019,3038,3050,3062,3080,3098,3103,3106,3109,3116,3123,3130,3137,3144,3150,3156,3168,3178,3188,3200,3205,3214]}],"src":"46:11026:29"},"id":29},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[4015],"AddLiquidityParams":[4031],"AfterSwapParams":[4009],"BufferWrapOrUnwrapParams":[4070],"FEE_BITLENGTH":[4073],"FEE_SCALING_FACTOR":[4076],"HookFlags":[3835],"HooksConfig":[3859],"IAuthorizer":[1009],"IERC20":[9632],"IERC4626":[8902],"IHooks":[1335],"IProtocolFeeController":[1673],"IRateProvider":[91],"IVault":[2319],"IVaultExtension":[3634],"LiquidityManagement":[3788],"MAX_FEE_PERCENTAGE":[4079],"PoolConfig":[3813],"PoolConfigBits":[3790],"PoolData":[3937],"PoolRoleAccounts":[3885],"PoolSwapParams":[3980],"RemoveLiquidityKind":[4036],"RemoveLiquidityParams":[4052],"Rounding":[3940],"SwapKind":[3943],"SwapState":[3869],"TokenConfig":[3902],"TokenInfo":[3912],"TokenType":[3889],"VaultState":[3877],"VaultSwapParams":[3962],"WrappingDirection":[4055]},"id":3635,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3217,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:30"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":8903,"src":"72:75:30","symbolAliases":[{"foreign":{"id":3218,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"81:8:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":9633,"src":"148:72:30","symbolAliases":[{"foreign":{"id":3220,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"157:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":1010,"src":"222:48:30","symbolAliases":[{"foreign":{"id":3222,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1009,"src":"231:11:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":1674,"src":"271:70:30","symbolAliases":[{"foreign":{"id":3224,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"280:22:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":3227,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":2320,"src":"342:38:30","symbolAliases":[{"foreign":{"id":3226,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"351:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":1336,"src":"381:38:30","symbolAliases":[{"foreign":{"id":3228,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1335,"src":"390:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3230,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3635,"sourceUnit":4080,"src":"420:26:30","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":3231,"nodeType":"StructuredDocumentation","src":"448:318:30","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":3634,"linearizedBaseContracts":[3634],"name":"IVaultExtension","nameLocation":"777:15:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3232,"nodeType":"StructuredDocumentation","src":"1025:206:30","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":3238,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:30","nodeType":"FunctionDefinition","parameters":{"id":3233,"nodeType":"ParameterList","parameters":[],"src":"1250:2:30"},"returnParameters":{"id":3237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3238,"src":"1276:6:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":3235,"nodeType":"UserDefinedTypeName","pathNode":{"id":3234,"name":"IVault","nameLocations":["1276:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1276:6:30"},"referencedDeclaration":2319,"src":"1276:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:30"},"scope":3634,"src":"1236:48:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3239,"nodeType":"StructuredDocumentation","src":"1290:202:30","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":3244,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:30","nodeType":"FunctionDefinition","parameters":{"id":3240,"nodeType":"ParameterList","parameters":[],"src":"1519:2:30"},"returnParameters":{"id":3243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3242,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:30","nodeType":"VariableDeclaration","scope":3244,"src":"1545:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3241,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:30"},"scope":3634,"src":"1497:68:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3245,"nodeType":"StructuredDocumentation","src":"1793:254:30","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":3250,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:30","nodeType":"FunctionDefinition","parameters":{"id":3246,"nodeType":"ParameterList","parameters":[],"src":"2071:2:30"},"returnParameters":{"id":3249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3248,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:30","nodeType":"VariableDeclaration","scope":3250,"src":"2097:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3247,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:30"},"scope":3634,"src":"2052:60:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3251,"nodeType":"StructuredDocumentation","src":"2118:141:30","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":3256,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:30","nodeType":"FunctionDefinition","parameters":{"id":3252,"nodeType":"ParameterList","parameters":[],"src":"2293:2:30"},"returnParameters":{"id":3255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3254,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:30","nodeType":"VariableDeclaration","scope":3256,"src":"2319:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:30"},"scope":3634,"src":"2264:82:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3257,"nodeType":"StructuredDocumentation","src":"2352:284:30","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":3265,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:30","nodeType":"FunctionDefinition","parameters":{"id":3261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3260,"mutability":"mutable","name":"token","nameLocation":"2671:5:30","nodeType":"VariableDeclaration","scope":3265,"src":"2664:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3259,"nodeType":"UserDefinedTypeName","pathNode":{"id":3258,"name":"IERC20","nameLocations":["2664:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2664:6:30"},"referencedDeclaration":9632,"src":"2664:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:30"},"returnParameters":{"id":3264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3263,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:30","nodeType":"VariableDeclaration","scope":3265,"src":"2701:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3262,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:30","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:30"},"scope":3634,"src":"2641:79:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3266,"nodeType":"StructuredDocumentation","src":"2726:230:30","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":3274,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:30","nodeType":"FunctionDefinition","parameters":{"id":3270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3269,"mutability":"mutable","name":"token","nameLocation":"2991:5:30","nodeType":"VariableDeclaration","scope":3274,"src":"2984:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3268,"nodeType":"UserDefinedTypeName","pathNode":{"id":3267,"name":"IERC20","nameLocations":["2984:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2984:6:30"},"referencedDeclaration":9632,"src":"2984:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:30"},"returnParameters":{"id":3273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3272,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:30","nodeType":"VariableDeclaration","scope":3274,"src":"3021:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3271,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:30"},"scope":3634,"src":"2961:83:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3275,"nodeType":"StructuredDocumentation","src":"3050:944:30","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":3282,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:30","nodeType":"FunctionDefinition","parameters":{"id":3278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3277,"mutability":"mutable","name":"pool","nameLocation":"4042:4:30","nodeType":"VariableDeclaration","scope":3282,"src":"4034:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3276,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:30"},"returnParameters":{"id":3281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3280,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:30","nodeType":"VariableDeclaration","scope":3282,"src":"4071:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3279,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:30"},"scope":3634,"src":"3999:93:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3283,"nodeType":"StructuredDocumentation","src":"4323:1604:30","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":3306,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:30","nodeType":"FunctionDefinition","parameters":{"id":3304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3285,"mutability":"mutable","name":"pool","nameLocation":"5971:4:30","nodeType":"VariableDeclaration","scope":3306,"src":"5963:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3284,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3289,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:30","nodeType":"VariableDeclaration","scope":3306,"src":"5985:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$3902_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3287,"nodeType":"UserDefinedTypeName","pathNode":{"id":3286,"name":"TokenConfig","nameLocations":["5985:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":3902,"src":"5985:11:30"},"referencedDeclaration":3902,"src":"5985:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$3902_storage_ptr","typeString":"struct TokenConfig"}},"id":3288,"nodeType":"ArrayTypeName","src":"5985:13:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$3902_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3291,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:30","nodeType":"VariableDeclaration","scope":3306,"src":"6027:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3290,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3293,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:30","nodeType":"VariableDeclaration","scope":3306,"src":"6062:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3292,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3295,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:30","nodeType":"VariableDeclaration","scope":3306,"src":"6097:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3294,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3298,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:30","nodeType":"VariableDeclaration","scope":3306,"src":"6129:38:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3297,"nodeType":"UserDefinedTypeName","pathNode":{"id":3296,"name":"PoolRoleAccounts","nameLocations":["6129:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":3885,"src":"6129:16:30"},"referencedDeclaration":3885,"src":"6129:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3300,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:30","nodeType":"VariableDeclaration","scope":3306,"src":"6177:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3299,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3303,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:30","nodeType":"VariableDeclaration","scope":3306,"src":"6212:48:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3302,"nodeType":"UserDefinedTypeName","pathNode":{"id":3301,"name":"LiquidityManagement","nameLocations":["6212:19:30"],"nodeType":"IdentifierPath","referencedDeclaration":3788,"src":"6212:19:30"},"referencedDeclaration":3788,"src":"6212:19:30","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:30"},"returnParameters":{"id":3305,"nodeType":"ParameterList","parameters":[],"src":"6275:0:30"},"scope":3634,"src":"5932:344:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3307,"nodeType":"StructuredDocumentation","src":"6282:185:30","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":3314,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:30","nodeType":"FunctionDefinition","parameters":{"id":3310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3309,"mutability":"mutable","name":"pool","nameLocation":"6506:4:30","nodeType":"VariableDeclaration","scope":3314,"src":"6498:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3308,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:30"},"returnParameters":{"id":3313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3312,"mutability":"mutable","name":"registered","nameLocation":"6540:10:30","nodeType":"VariableDeclaration","scope":3314,"src":"6535:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3311,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:30"},"scope":3634,"src":"6472:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3315,"nodeType":"StructuredDocumentation","src":"6558:589:30","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":3335,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:30","nodeType":"FunctionDefinition","parameters":{"id":3331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3317,"mutability":"mutable","name":"pool","nameLocation":"7189:4:30","nodeType":"VariableDeclaration","scope":3335,"src":"7181:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3316,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3319,"mutability":"mutable","name":"to","nameLocation":"7211:2:30","nodeType":"VariableDeclaration","scope":3335,"src":"7203:10:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3318,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3323,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:30","nodeType":"VariableDeclaration","scope":3335,"src":"7223:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3321,"nodeType":"UserDefinedTypeName","pathNode":{"id":3320,"name":"IERC20","nameLocations":["7223:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"7223:6:30"},"referencedDeclaration":9632,"src":"7223:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":3322,"nodeType":"ArrayTypeName","src":"7223:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3326,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:30","nodeType":"VariableDeclaration","scope":3335,"src":"7255:31:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3324,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3325,"nodeType":"ArrayTypeName","src":"7255:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3328,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:30","nodeType":"VariableDeclaration","scope":3335,"src":"7296:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3327,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3330,"mutability":"mutable","name":"userData","nameLocation":"7342:8:30","nodeType":"VariableDeclaration","scope":3335,"src":"7329:21:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3329,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:30"},"returnParameters":{"id":3334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3333,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:30","nodeType":"VariableDeclaration","scope":3335,"src":"7375:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3332,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:30"},"scope":3634,"src":"7152:245:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3336,"nodeType":"StructuredDocumentation","src":"7627:258:30","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":3343,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:30","nodeType":"FunctionDefinition","parameters":{"id":3339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3338,"mutability":"mutable","name":"pool","nameLocation":"7925:4:30","nodeType":"VariableDeclaration","scope":3343,"src":"7917:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3337,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:30"},"returnParameters":{"id":3342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3341,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:30","nodeType":"VariableDeclaration","scope":3343,"src":"7954:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3340,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:30"},"scope":3634,"src":"7890:82:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3344,"nodeType":"StructuredDocumentation","src":"7978:152:30","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":3353,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:30","nodeType":"FunctionDefinition","parameters":{"id":3347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3346,"mutability":"mutable","name":"pool","nameLocation":"8166:4:30","nodeType":"VariableDeclaration","scope":3353,"src":"8158:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3345,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:30"},"returnParameters":{"id":3352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3351,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:30","nodeType":"VariableDeclaration","scope":3353,"src":"8195:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3349,"nodeType":"UserDefinedTypeName","pathNode":{"id":3348,"name":"IERC20","nameLocations":["8195:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"8195:6:30"},"referencedDeclaration":9632,"src":"8195:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":3350,"nodeType":"ArrayTypeName","src":"8195:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:30"},"scope":3634,"src":"8135:84:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3354,"nodeType":"StructuredDocumentation","src":"8225:512:30","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":3365,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:30","nodeType":"FunctionDefinition","parameters":{"id":3357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3356,"mutability":"mutable","name":"pool","nameLocation":"8786:4:30","nodeType":"VariableDeclaration","scope":3365,"src":"8778:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3355,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:30"},"returnParameters":{"id":3364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3360,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:30","nodeType":"VariableDeclaration","scope":3365,"src":"8820:38:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3358,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3359,"nodeType":"ArrayTypeName","src":"8820:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3363,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:30","nodeType":"VariableDeclaration","scope":3365,"src":"8860:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3361,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3362,"nodeType":"ArrayTypeName","src":"8860:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:30"},"scope":3634,"src":"8742:147:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3366,"nodeType":"StructuredDocumentation","src":"8895:287:30","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":3374,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:30","nodeType":"FunctionDefinition","parameters":{"id":3369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3368,"mutability":"mutable","name":"pool","nameLocation":"9216:4:30","nodeType":"VariableDeclaration","scope":3374,"src":"9208:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3367,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:30"},"returnParameters":{"id":3373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3372,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:30","nodeType":"VariableDeclaration","scope":3374,"src":"9245:24:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$3937_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":3371,"nodeType":"UserDefinedTypeName","pathNode":{"id":3370,"name":"PoolData","nameLocations":["9245:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":3937,"src":"9245:8:30"},"referencedDeclaration":3937,"src":"9245:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$3937_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:30"},"scope":3634,"src":"9187:84:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3375,"nodeType":"StructuredDocumentation","src":"9277:531:30","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":3394,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:30","nodeType":"FunctionDefinition","parameters":{"id":3378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3377,"mutability":"mutable","name":"pool","nameLocation":"9856:4:30","nodeType":"VariableDeclaration","scope":3394,"src":"9848:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3376,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:30"},"returnParameters":{"id":3393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3382,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:30","nodeType":"VariableDeclaration","scope":3394,"src":"9927:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3380,"nodeType":"UserDefinedTypeName","pathNode":{"id":3379,"name":"IERC20","nameLocations":["9927:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"9927:6:30"},"referencedDeclaration":9632,"src":"9927:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":3381,"nodeType":"ArrayTypeName","src":"9927:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3386,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:30","nodeType":"VariableDeclaration","scope":3394,"src":"9963:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$3912_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":3384,"nodeType":"UserDefinedTypeName","pathNode":{"id":3383,"name":"TokenInfo","nameLocations":["9963:9:30"],"nodeType":"IdentifierPath","referencedDeclaration":3912,"src":"9963:9:30"},"referencedDeclaration":3912,"src":"9963:9:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$3912_storage_ptr","typeString":"struct TokenInfo"}},"id":3385,"nodeType":"ArrayTypeName","src":"9963:11:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$3912_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":3389,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:30","nodeType":"VariableDeclaration","scope":3394,"src":"10005:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3387,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3388,"nodeType":"ArrayTypeName","src":"10005:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3392,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:30","nodeType":"VariableDeclaration","scope":3394,"src":"10047:41:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3390,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3391,"nodeType":"ArrayTypeName","src":"10047:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:30"},"scope":3634,"src":"9813:286:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3395,"nodeType":"StructuredDocumentation","src":"10105:312:30","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":3403,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:30","nodeType":"FunctionDefinition","parameters":{"id":3398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3397,"mutability":"mutable","name":"pool","nameLocation":"10462:4:30","nodeType":"VariableDeclaration","scope":3403,"src":"10454:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3396,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:30"},"returnParameters":{"id":3402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3401,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:30","nodeType":"VariableDeclaration","scope":3403,"src":"10491:37:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3399,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3400,"nodeType":"ArrayTypeName","src":"10491:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:30"},"scope":3634,"src":"10422:108:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3404,"nodeType":"StructuredDocumentation","src":"10536:301:30","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":3412,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:30","nodeType":"FunctionDefinition","parameters":{"id":3407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3406,"mutability":"mutable","name":"pool","nameLocation":"10873:4:30","nodeType":"VariableDeclaration","scope":3412,"src":"10865:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3405,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:30"},"returnParameters":{"id":3411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3410,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:30","nodeType":"VariableDeclaration","scope":3412,"src":"10902:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$3813_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":3409,"nodeType":"UserDefinedTypeName","pathNode":{"id":3408,"name":"PoolConfig","nameLocations":["10902:10:30"],"nodeType":"IdentifierPath","referencedDeclaration":3813,"src":"10902:10:30"},"referencedDeclaration":3813,"src":"10902:10:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$3813_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:30"},"scope":3634,"src":"10842:90:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3413,"nodeType":"StructuredDocumentation","src":"10938:283:30","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":3421,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:30","nodeType":"FunctionDefinition","parameters":{"id":3416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3415,"mutability":"mutable","name":"pool","nameLocation":"11258:4:30","nodeType":"VariableDeclaration","scope":3421,"src":"11250:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3414,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:30"},"returnParameters":{"id":3420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3419,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:30","nodeType":"VariableDeclaration","scope":3421,"src":"11287:30:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$3859_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3418,"nodeType":"UserDefinedTypeName","pathNode":{"id":3417,"name":"HooksConfig","nameLocations":["11287:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":3859,"src":"11287:11:30"},"referencedDeclaration":3859,"src":"11287:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$3859_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:30"},"scope":3634,"src":"11226:93:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3422,"nodeType":"StructuredDocumentation","src":"11325:160:30","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":3429,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:30","nodeType":"FunctionDefinition","parameters":{"id":3425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3424,"mutability":"mutable","name":"pool","nameLocation":"11518:4:30","nodeType":"VariableDeclaration","scope":3429,"src":"11510:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3423,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:30"},"returnParameters":{"id":3428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3427,"mutability":"mutable","name":"rate","nameLocation":"11555:4:30","nodeType":"VariableDeclaration","scope":3429,"src":"11547:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3426,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:30"},"scope":3634,"src":"11490:71:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3430,"nodeType":"StructuredDocumentation","src":"11792:168:30","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":3437,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:30","nodeType":"FunctionDefinition","parameters":{"id":3433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3432,"mutability":"mutable","name":"token","nameLocation":"11994:5:30","nodeType":"VariableDeclaration","scope":3437,"src":"11986:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3431,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:30"},"returnParameters":{"id":3436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3435,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:30","nodeType":"VariableDeclaration","scope":3437,"src":"12024:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3434,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:30"},"scope":3634,"src":"11965:85:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3438,"nodeType":"StructuredDocumentation","src":"12056:225:30","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":3447,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:30","nodeType":"FunctionDefinition","parameters":{"id":3443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3440,"mutability":"mutable","name":"token","nameLocation":"12313:5:30","nodeType":"VariableDeclaration","scope":3447,"src":"12305:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3439,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3442,"mutability":"mutable","name":"account","nameLocation":"12328:7:30","nodeType":"VariableDeclaration","scope":3447,"src":"12320:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3441,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:30"},"returnParameters":{"id":3446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3445,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:30","nodeType":"VariableDeclaration","scope":3447,"src":"12360:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3444,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:30"},"scope":3634,"src":"12286:96:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3448,"nodeType":"StructuredDocumentation","src":"12388:299:30","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":3459,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:30","nodeType":"FunctionDefinition","parameters":{"id":3455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3450,"mutability":"mutable","name":"token","nameLocation":"12719:5:30","nodeType":"VariableDeclaration","scope":3459,"src":"12711:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3449,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3452,"mutability":"mutable","name":"owner","nameLocation":"12734:5:30","nodeType":"VariableDeclaration","scope":3459,"src":"12726:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3451,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3454,"mutability":"mutable","name":"spender","nameLocation":"12749:7:30","nodeType":"VariableDeclaration","scope":3459,"src":"12741:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3453,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:30"},"returnParameters":{"id":3458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3457,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:30","nodeType":"VariableDeclaration","scope":3459,"src":"12781:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3456,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:30"},"scope":3634,"src":"12692:113:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3460,"nodeType":"StructuredDocumentation","src":"12811:475:30","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":3471,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:30","nodeType":"FunctionDefinition","parameters":{"id":3467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3462,"mutability":"mutable","name":"owner","nameLocation":"13316:5:30","nodeType":"VariableDeclaration","scope":3471,"src":"13308:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3461,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3464,"mutability":"mutable","name":"spender","nameLocation":"13331:7:30","nodeType":"VariableDeclaration","scope":3471,"src":"13323:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3463,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3466,"mutability":"mutable","name":"amount","nameLocation":"13348:6:30","nodeType":"VariableDeclaration","scope":3471,"src":"13340:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3465,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:30"},"returnParameters":{"id":3470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3469,"mutability":"mutable","name":"success","nameLocation":"13379:7:30","nodeType":"VariableDeclaration","scope":3471,"src":"13374:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3468,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:30"},"scope":3634,"src":"13291:97:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3472,"nodeType":"StructuredDocumentation","src":"13615:251:30","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":3479,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:30","nodeType":"FunctionDefinition","parameters":{"id":3475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3474,"mutability":"mutable","name":"pool","nameLocation":"13901:4:30","nodeType":"VariableDeclaration","scope":3479,"src":"13893:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3473,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:30"},"returnParameters":{"id":3478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3477,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:30","nodeType":"VariableDeclaration","scope":3479,"src":"13930:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3476,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:30"},"scope":3634,"src":"13871:76:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3480,"nodeType":"StructuredDocumentation","src":"13953:648:30","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":3493,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:30","nodeType":"FunctionDefinition","parameters":{"id":3483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3482,"mutability":"mutable","name":"pool","nameLocation":"14651:4:30","nodeType":"VariableDeclaration","scope":3493,"src":"14643:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3481,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:30"},"returnParameters":{"id":3492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3485,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:30","nodeType":"VariableDeclaration","scope":3493,"src":"14709:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3484,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3487,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:30","nodeType":"VariableDeclaration","scope":3493,"src":"14726:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3486,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3489,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:30","nodeType":"VariableDeclaration","scope":3493,"src":"14757:30:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3488,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3491,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:30","nodeType":"VariableDeclaration","scope":3493,"src":"14789:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3490,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:30"},"scope":3634,"src":"14606:205:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3494,"nodeType":"StructuredDocumentation","src":"15039:332:30","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":3502,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:30","nodeType":"FunctionDefinition","parameters":{"id":3498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3497,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:30","nodeType":"VariableDeclaration","scope":3502,"src":"15412:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3496,"nodeType":"UserDefinedTypeName","pathNode":{"id":3495,"name":"IERC4626","nameLocations":["15412:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"15412:8:30"},"referencedDeclaration":8902,"src":"15412:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:30"},"returnParameters":{"id":3501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3500,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:30","nodeType":"VariableDeclaration","scope":3502,"src":"15458:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3499,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:30"},"scope":3634,"src":"15376:108:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3503,"nodeType":"StructuredDocumentation","src":"15490:477:30","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":3511,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:30","nodeType":"FunctionDefinition","parameters":{"id":3507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3506,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:30","nodeType":"VariableDeclaration","scope":3511,"src":"16003:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":3505,"nodeType":"UserDefinedTypeName","pathNode":{"id":3504,"name":"IERC4626","nameLocations":["16003:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"16003:8:30"},"referencedDeclaration":8902,"src":"16003:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:30"},"returnParameters":{"id":3510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3509,"mutability":"mutable","name":"asset","nameLocation":"16057:5:30","nodeType":"VariableDeclaration","scope":3511,"src":"16049:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3508,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:30"},"scope":3634,"src":"15972:92:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3512,"nodeType":"StructuredDocumentation","src":"16288:379:30","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":3522,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:30","nodeType":"FunctionDefinition","parameters":{"id":3518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3514,"mutability":"mutable","name":"pool","nameLocation":"16715:4:30","nodeType":"VariableDeclaration","scope":3522,"src":"16707:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3513,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3517,"mutability":"mutable","name":"token","nameLocation":"16728:5:30","nodeType":"VariableDeclaration","scope":3522,"src":"16721:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3516,"nodeType":"UserDefinedTypeName","pathNode":{"id":3515,"name":"IERC20","nameLocations":["16721:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"16721:6:30"},"referencedDeclaration":9632,"src":"16721:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:30"},"returnParameters":{"id":3521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3520,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:30","nodeType":"VariableDeclaration","scope":3522,"src":"16758:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3519,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:30"},"scope":3634,"src":"16672:109:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3523,"nodeType":"StructuredDocumentation","src":"16787:381:30","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":3533,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:30","nodeType":"FunctionDefinition","parameters":{"id":3529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3525,"mutability":"mutable","name":"pool","nameLocation":"17217:4:30","nodeType":"VariableDeclaration","scope":3533,"src":"17209:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3524,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3528,"mutability":"mutable","name":"token","nameLocation":"17230:5:30","nodeType":"VariableDeclaration","scope":3533,"src":"17223:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3527,"nodeType":"UserDefinedTypeName","pathNode":{"id":3526,"name":"IERC20","nameLocations":["17223:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"17223:6:30"},"referencedDeclaration":9632,"src":"17223:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:30"},"returnParameters":{"id":3532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3531,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:30","nodeType":"VariableDeclaration","scope":3533,"src":"17260:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3530,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:30"},"scope":3634,"src":"17173:111:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3534,"nodeType":"StructuredDocumentation","src":"17290:271:30","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":3541,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:30","nodeType":"FunctionDefinition","parameters":{"id":3537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3536,"mutability":"mutable","name":"pool","nameLocation":"17610:4:30","nodeType":"VariableDeclaration","scope":3541,"src":"17602:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3535,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:30"},"returnParameters":{"id":3540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3539,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:30","nodeType":"VariableDeclaration","scope":3541,"src":"17639:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3538,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:30"},"scope":3634,"src":"17566:100:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3542,"nodeType":"StructuredDocumentation","src":"17672:286:30","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":3550,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:30","nodeType":"FunctionDefinition","parameters":{"id":3545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3544,"mutability":"mutable","name":"pool","nameLocation":"18000:4:30","nodeType":"VariableDeclaration","scope":3550,"src":"17992:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3543,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:30"},"returnParameters":{"id":3549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3548,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:30","nodeType":"VariableDeclaration","scope":3550,"src":"18029:36:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3547,"nodeType":"UserDefinedTypeName","pathNode":{"id":3546,"name":"PoolRoleAccounts","nameLocations":["18029:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":3885,"src":"18029:16:30"},"referencedDeclaration":3885,"src":"18029:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:30"},"scope":3634,"src":"17963:104:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3551,"nodeType":"StructuredDocumentation","src":"18073:363:30","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":3561,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:30","nodeType":"FunctionDefinition","parameters":{"id":3557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3553,"mutability":"mutable","name":"pool","nameLocation":"18499:4:30","nodeType":"VariableDeclaration","scope":3561,"src":"18491:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3552,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3556,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:30","nodeType":"VariableDeclaration","scope":3561,"src":"18513:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":3555,"nodeType":"UserDefinedTypeName","pathNode":{"id":3554,"name":"PoolSwapParams","nameLocations":["18513:14:30"],"nodeType":"IdentifierPath","referencedDeclaration":3980,"src":"18513:14:30"},"referencedDeclaration":3980,"src":"18513:14:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$3980_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:30"},"returnParameters":{"id":3560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3559,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:30","nodeType":"VariableDeclaration","scope":3561,"src":"18575:32:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3558,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:30"},"scope":3634,"src":"18441:168:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3562,"nodeType":"StructuredDocumentation","src":"18615:145:30","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":3568,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:30","nodeType":"FunctionDefinition","parameters":{"id":3563,"nodeType":"ParameterList","parameters":[],"src":"18798:2:30"},"returnParameters":{"id":3567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3566,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:30","nodeType":"VariableDeclaration","scope":3568,"src":"18824:44:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":3565,"nodeType":"UserDefinedTypeName","pathNode":{"id":3564,"name":"IProtocolFeeController","nameLocations":["18824:22:30"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"18824:22:30"},"referencedDeclaration":1673,"src":"18824:22:30","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:30"},"scope":3634,"src":"18765:105:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3569,"nodeType":"StructuredDocumentation","src":"19098:296:30","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":3576,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:30","nodeType":"FunctionDefinition","parameters":{"id":3572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3571,"mutability":"mutable","name":"pool","nameLocation":"19437:4:30","nodeType":"VariableDeclaration","scope":3576,"src":"19429:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3570,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:30"},"returnParameters":{"id":3575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3574,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:30","nodeType":"VariableDeclaration","scope":3576,"src":"19466:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3573,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:30"},"scope":3634,"src":"19399:88:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3577,"nodeType":"StructuredDocumentation","src":"19493:679:30","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":3592,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:30","nodeType":"FunctionDefinition","parameters":{"id":3587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3579,"mutability":"mutable","name":"pool","nameLocation":"20227:4:30","nodeType":"VariableDeclaration","scope":3592,"src":"20219:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3578,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3581,"mutability":"mutable","name":"from","nameLocation":"20249:4:30","nodeType":"VariableDeclaration","scope":3592,"src":"20241:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3580,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3583,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:30","nodeType":"VariableDeclaration","scope":3592,"src":"20263:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3582,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3586,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:30","nodeType":"VariableDeclaration","scope":3592,"src":"20297:30:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3584,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3585,"nodeType":"ArrayTypeName","src":"20297:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:30"},"returnParameters":{"id":3591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3590,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:30","nodeType":"VariableDeclaration","scope":3592,"src":"20352:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3588,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3589,"nodeType":"ArrayTypeName","src":"20352:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:30"},"scope":3634,"src":"20177:204:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3593,"nodeType":"StructuredDocumentation","src":"20602:699:30","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":3600,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:30","nodeType":"FunctionDefinition","parameters":{"id":3596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3595,"mutability":"mutable","name":"data","nameLocation":"21336:4:30","nodeType":"VariableDeclaration","scope":3600,"src":"21321:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3594,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:30"},"returnParameters":{"id":3599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3598,"mutability":"mutable","name":"result","nameLocation":"21373:6:30","nodeType":"VariableDeclaration","scope":3600,"src":"21360:19:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3597,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:30"},"scope":3634,"src":"21306:75:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3601,"nodeType":"StructuredDocumentation","src":"21387:731:30","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":3606,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:30","nodeType":"FunctionDefinition","parameters":{"id":3604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3603,"mutability":"mutable","name":"data","nameLocation":"22162:4:30","nodeType":"VariableDeclaration","scope":3606,"src":"22147:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3602,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:30"},"returnParameters":{"id":3605,"nodeType":"ParameterList","parameters":[],"src":"22176:0:30"},"scope":3634,"src":"22123:54:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3607,"nodeType":"StructuredDocumentation","src":"22183:239:30","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":3612,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:30","nodeType":"FunctionDefinition","parameters":{"id":3608,"nodeType":"ParameterList","parameters":[],"src":"22451:2:30"},"returnParameters":{"id":3611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3610,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:30","nodeType":"VariableDeclaration","scope":3612,"src":"22477:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3609,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:30"},"scope":3634,"src":"22427:70:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3613,"nodeType":"StructuredDocumentation","src":"22503:302:30","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":3618,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:30","nodeType":"FunctionDefinition","parameters":{"id":3614,"nodeType":"ParameterList","parameters":[],"src":"22845:2:30"},"returnParameters":{"id":3617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3616,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:30","nodeType":"VariableDeclaration","scope":3618,"src":"22871:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3615,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:30"},"scope":3634,"src":"22810:92:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3619,"nodeType":"StructuredDocumentation","src":"22908:162:30","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":3626,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:30","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3621,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:30","nodeType":"VariableDeclaration","scope":3626,"src":"23103:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3620,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3623,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:30","nodeType":"VariableDeclaration","scope":3626,"src":"23121:24:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3622,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:30"},"returnParameters":{"id":3625,"nodeType":"ParameterList","parameters":[],"src":"23155:0:30"},"scope":3634,"src":"23075:81:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3627,"nodeType":"StructuredDocumentation","src":"23380:284:30","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":3633,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:30","nodeType":"FunctionDefinition","parameters":{"id":3628,"nodeType":"ParameterList","parameters":[],"src":"23691:2:30"},"returnParameters":{"id":3632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3631,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:30","nodeType":"VariableDeclaration","scope":3633,"src":"23717:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"},"typeName":{"id":3630,"nodeType":"UserDefinedTypeName","pathNode":{"id":3629,"name":"IAuthorizer","nameLocations":["23717:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":1009,"src":"23717:11:30"},"referencedDeclaration":1009,"src":"23717:11:30","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:30"},"scope":3634,"src":"23669:72:30","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3635,"src":"767:22976:30","usedErrors":[],"usedEvents":[]}],"src":"46:23698:30"},"id":30},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[4015],"AddLiquidityParams":[4031],"AfterSwapParams":[4009],"BufferWrapOrUnwrapParams":[4070],"FEE_BITLENGTH":[4073],"FEE_SCALING_FACTOR":[4076],"HookFlags":[3835],"HooksConfig":[3859],"IERC20":[9632],"IERC4626":[8902],"IRateProvider":[91],"IVaultMain":[3770],"LiquidityManagement":[3788],"MAX_FEE_PERCENTAGE":[4079],"PoolConfig":[3813],"PoolConfigBits":[3790],"PoolData":[3937],"PoolRoleAccounts":[3885],"PoolSwapParams":[3980],"RemoveLiquidityKind":[4036],"RemoveLiquidityParams":[4052],"Rounding":[3940],"SwapKind":[3943],"SwapState":[3869],"TokenConfig":[3902],"TokenInfo":[3912],"TokenType":[3889],"VaultState":[3877],"VaultSwapParams":[3962],"WrappingDirection":[4055]},"id":3771,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3636,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:31"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3638,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3771,"sourceUnit":9633,"src":"72:72:31","symbolAliases":[{"foreign":{"id":3637,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3771,"sourceUnit":4080,"src":"146:26:31","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":3640,"nodeType":"StructuredDocumentation","src":"174:232:31","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":3770,"linearizedBaseContracts":[3770],"name":"IVaultMain","nameLocation":"417:10:31","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3641,"nodeType":"StructuredDocumentation","src":"656:431:31","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":3648,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:31","nodeType":"FunctionDefinition","parameters":{"id":3644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3643,"mutability":"mutable","name":"data","nameLocation":"1123:4:31","nodeType":"VariableDeclaration","scope":3648,"src":"1108:19:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3642,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:31"},"returnParameters":{"id":3647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3646,"mutability":"mutable","name":"result","nameLocation":"1160:6:31","nodeType":"VariableDeclaration","scope":3648,"src":"1147:19:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3645,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:31"},"scope":3770,"src":"1092:76:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3649,"nodeType":"StructuredDocumentation","src":"1174:1291:31","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":3659,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:31","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3652,"mutability":"mutable","name":"token","nameLocation":"2493:5:31","nodeType":"VariableDeclaration","scope":3659,"src":"2486:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3651,"nodeType":"UserDefinedTypeName","pathNode":{"id":3650,"name":"IERC20","nameLocations":["2486:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2486:6:31"},"referencedDeclaration":9632,"src":"2486:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3654,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:31","nodeType":"VariableDeclaration","scope":3659,"src":"2500:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3653,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:31"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"credit","nameLocation":"2546:6:31","nodeType":"VariableDeclaration","scope":3659,"src":"2538:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3656,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:31"},"scope":3770,"src":"2470:84:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3660,"nodeType":"StructuredDocumentation","src":"2560:315:31","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":3670,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:31","nodeType":"FunctionDefinition","parameters":{"id":3668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3663,"mutability":"mutable","name":"token","nameLocation":"2903:5:31","nodeType":"VariableDeclaration","scope":3670,"src":"2896:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3662,"nodeType":"UserDefinedTypeName","pathNode":{"id":3661,"name":"IERC20","nameLocations":["2896:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2896:6:31"},"referencedDeclaration":9632,"src":"2896:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3665,"mutability":"mutable","name":"to","nameLocation":"2918:2:31","nodeType":"VariableDeclaration","scope":3670,"src":"2910:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3664,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3667,"mutability":"mutable","name":"amount","nameLocation":"2930:6:31","nodeType":"VariableDeclaration","scope":3670,"src":"2922:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3666,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:31"},"returnParameters":{"id":3669,"nodeType":"ParameterList","parameters":[],"src":"2946:0:31"},"scope":3770,"src":"2880:67:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3671,"nodeType":"StructuredDocumentation","src":"3161:412:31","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":3683,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:31","nodeType":"FunctionDefinition","parameters":{"id":3675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3674,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:31","nodeType":"VariableDeclaration","scope":3683,"src":"3601:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$3962_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":3673,"nodeType":"UserDefinedTypeName","pathNode":{"id":3672,"name":"VaultSwapParams","nameLocations":["3601:15:31"],"nodeType":"IdentifierPath","referencedDeclaration":3962,"src":"3601:15:31"},"referencedDeclaration":3962,"src":"3601:15:31","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$3962_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:31"},"returnParameters":{"id":3682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3677,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:31","nodeType":"VariableDeclaration","scope":3683,"src":"3664:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3676,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3679,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:31","nodeType":"VariableDeclaration","scope":3683,"src":"3693:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3681,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:31","nodeType":"VariableDeclaration","scope":3683,"src":"3714:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3680,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:31"},"scope":3770,"src":"3578:158:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3684,"nodeType":"StructuredDocumentation","src":"3954:523:31","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":3697,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:31","nodeType":"FunctionDefinition","parameters":{"id":3688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3687,"mutability":"mutable","name":"params","nameLocation":"4539:6:31","nodeType":"VariableDeclaration","scope":3697,"src":"4513:32:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4031_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":3686,"nodeType":"UserDefinedTypeName","pathNode":{"id":3685,"name":"AddLiquidityParams","nameLocations":["4513:18:31"],"nodeType":"IdentifierPath","referencedDeclaration":4031,"src":"4513:18:31"},"referencedDeclaration":4031,"src":"4513:18:31","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4031_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:31"},"returnParameters":{"id":3696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3691,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:31","nodeType":"VariableDeclaration","scope":3697,"src":"4570:26:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3689,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3690,"nodeType":"ArrayTypeName","src":"4570:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3693,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:31","nodeType":"VariableDeclaration","scope":3697,"src":"4598:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3692,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3695,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:31","nodeType":"VariableDeclaration","scope":3697,"src":"4620:23:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3694,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:31"},"scope":3770,"src":"4482:163:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3698,"nodeType":"StructuredDocumentation","src":"4864:644:31","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":3711,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:31","nodeType":"FunctionDefinition","parameters":{"id":3702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3701,"mutability":"mutable","name":"params","nameLocation":"5576:6:31","nodeType":"VariableDeclaration","scope":3711,"src":"5547:35:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4052_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":3700,"nodeType":"UserDefinedTypeName","pathNode":{"id":3699,"name":"RemoveLiquidityParams","nameLocations":["5547:21:31"],"nodeType":"IdentifierPath","referencedDeclaration":4052,"src":"5547:21:31"},"referencedDeclaration":4052,"src":"5547:21:31","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4052_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:31"},"returnParameters":{"id":3710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3704,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:31","nodeType":"VariableDeclaration","scope":3711,"src":"5607:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3703,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3707,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:31","nodeType":"VariableDeclaration","scope":3711,"src":"5628:27:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3705,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3706,"nodeType":"ArrayTypeName","src":"5628:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3709,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:31","nodeType":"VariableDeclaration","scope":3711,"src":"5657:23:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3708,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:31"},"scope":3770,"src":"5513:169:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3712,"nodeType":"StructuredDocumentation","src":"5912:385:31","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":3724,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:31","nodeType":"FunctionDefinition","parameters":{"id":3718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3714,"mutability":"mutable","name":"pool","nameLocation":"6361:4:31","nodeType":"VariableDeclaration","scope":3724,"src":"6353:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3713,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3717,"mutability":"mutable","name":"token","nameLocation":"6382:5:31","nodeType":"VariableDeclaration","scope":3724,"src":"6375:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3716,"nodeType":"UserDefinedTypeName","pathNode":{"id":3715,"name":"IERC20","nameLocations":["6375:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"6375:6:31"},"referencedDeclaration":9632,"src":"6375:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:31"},"returnParameters":{"id":3723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3720,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:31","nodeType":"VariableDeclaration","scope":3724,"src":"6417:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3719,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3722,"mutability":"mutable","name":"index","nameLocation":"6445:5:31","nodeType":"VariableDeclaration","scope":3724,"src":"6437:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3721,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:31"},"scope":3770,"src":"6302:150:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3725,"nodeType":"StructuredDocumentation","src":"6683:460:31","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":3736,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:31","nodeType":"FunctionDefinition","parameters":{"id":3732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3727,"mutability":"mutable","name":"owner","nameLocation":"7174:5:31","nodeType":"VariableDeclaration","scope":3736,"src":"7166:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3726,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3729,"mutability":"mutable","name":"to","nameLocation":"7189:2:31","nodeType":"VariableDeclaration","scope":3736,"src":"7181:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3728,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3731,"mutability":"mutable","name":"amount","nameLocation":"7201:6:31","nodeType":"VariableDeclaration","scope":3736,"src":"7193:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3730,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:31"},"returnParameters":{"id":3735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3736,"src":"7227:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3733,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:31"},"scope":3770,"src":"7148:85:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3737,"nodeType":"StructuredDocumentation","src":"7239:544:31","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":3750,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:31","nodeType":"FunctionDefinition","parameters":{"id":3746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3739,"mutability":"mutable","name":"spender","nameLocation":"7818:7:31","nodeType":"VariableDeclaration","scope":3750,"src":"7810:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3738,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"from","nameLocation":"7835:4:31","nodeType":"VariableDeclaration","scope":3750,"src":"7827:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3740,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3743,"mutability":"mutable","name":"to","nameLocation":"7849:2:31","nodeType":"VariableDeclaration","scope":3750,"src":"7841:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3742,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3745,"mutability":"mutable","name":"amount","nameLocation":"7861:6:31","nodeType":"VariableDeclaration","scope":3750,"src":"7853:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3744,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:31"},"returnParameters":{"id":3749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3748,"mutability":"mutable","name":"success","nameLocation":"7892:7:31","nodeType":"VariableDeclaration","scope":3750,"src":"7887:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3747,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:31"},"scope":3770,"src":"7788:113:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3751,"nodeType":"StructuredDocumentation","src":"8128:575:31","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":3763,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:31","nodeType":"FunctionDefinition","parameters":{"id":3755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3754,"mutability":"mutable","name":"params","nameLocation":"8784:6:31","nodeType":"VariableDeclaration","scope":3763,"src":"8752:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4070_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":3753,"nodeType":"UserDefinedTypeName","pathNode":{"id":3752,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:31"],"nodeType":"IdentifierPath","referencedDeclaration":4070,"src":"8752:24:31"},"referencedDeclaration":4070,"src":"8752:24:31","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4070_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:31"},"returnParameters":{"id":3762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:31","nodeType":"VariableDeclaration","scope":3763,"src":"8815:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3756,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3759,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:31","nodeType":"VariableDeclaration","scope":3763,"src":"8844:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3758,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3761,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:31","nodeType":"VariableDeclaration","scope":3763,"src":"8865:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3760,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:31"},"scope":3770,"src":"8708:179:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3764,"nodeType":"StructuredDocumentation","src":"9115:345:31","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":3769,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:31","nodeType":"FunctionDefinition","parameters":{"id":3765,"nodeType":"ParameterList","parameters":[],"src":"9491:2:31"},"returnParameters":{"id":3768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3767,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:31","nodeType":"VariableDeclaration","scope":3769,"src":"9517:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3766,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:31"},"scope":3770,"src":"9465:76:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3771,"src":"407:9136:31","usedErrors":[],"usedEvents":[]}],"src":"46:9498:31"},"id":31},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[4015],"AddLiquidityParams":[4031],"AfterSwapParams":[4009],"BufferWrapOrUnwrapParams":[4070],"FEE_BITLENGTH":[4073],"FEE_SCALING_FACTOR":[4076],"HookFlags":[3835],"HooksConfig":[3859],"IERC20":[9632],"IERC4626":[8902],"IRateProvider":[91],"LiquidityManagement":[3788],"MAX_FEE_PERCENTAGE":[4079],"PoolConfig":[3813],"PoolConfigBits":[3790],"PoolData":[3937],"PoolRoleAccounts":[3885],"PoolSwapParams":[3980],"RemoveLiquidityKind":[4036],"RemoveLiquidityParams":[4052],"Rounding":[3940],"SwapKind":[3943],"SwapState":[3869],"TokenConfig":[3902],"TokenInfo":[3912],"TokenType":[3889],"VaultState":[3877],"VaultSwapParams":[3962],"WrappingDirection":[4055]},"id":4080,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3772,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:32"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3774,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4080,"sourceUnit":9633,"src":"72:72:32","symbolAliases":[{"foreign":{"id":3773,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3776,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4080,"sourceUnit":8903,"src":"145:75:32","symbolAliases":[{"foreign":{"id":3775,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"154:8:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":3778,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4080,"sourceUnit":92,"src":"222:76:32","symbolAliases":[{"foreign":{"id":3777,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"231:13:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":3779,"nodeType":"StructuredDocumentation","src":"300:472:32","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":3788,"members":[{"constant":false,"id":3781,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:32","nodeType":"VariableDeclaration","scope":3788,"src":"806:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3780,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3783,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:32","nodeType":"VariableDeclaration","scope":3788,"src":"843:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3782,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3785,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:32","nodeType":"VariableDeclaration","scope":3788,"src":"878:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3784,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3787,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:32","nodeType":"VariableDeclaration","scope":3788,"src":"916:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3786,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:32","nodeType":"StructDefinition","scope":4080,"src":"773:165:32","visibility":"public"},{"canonicalName":"PoolConfigBits","id":3790,"name":"PoolConfigBits","nameLocation":"1015:14:32","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:32","underlyingType":{"id":3789,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":3791,"nodeType":"StructuredDocumentation","src":"1043:1034:32","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":3813,"members":[{"constant":false,"id":3794,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:32","nodeType":"VariableDeclaration","scope":3813,"src":"2102:39:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3793,"nodeType":"UserDefinedTypeName","pathNode":{"id":3792,"name":"LiquidityManagement","nameLocations":["2102:19:32"],"nodeType":"IdentifierPath","referencedDeclaration":3788,"src":"2102:19:32"},"referencedDeclaration":3788,"src":"2102:19:32","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3788_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":3796,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:32","nodeType":"VariableDeclaration","scope":3813,"src":"2147:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3795,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3798,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:32","nodeType":"VariableDeclaration","scope":3813,"src":"2184:34:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3797,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3800,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:32","nodeType":"VariableDeclaration","scope":3813,"src":"2224:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3799,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3802,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:32","nodeType":"VariableDeclaration","scope":3813,"src":"2265:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":3801,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:32","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":3804,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:32","nodeType":"VariableDeclaration","scope":3813,"src":"2295:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3803,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3806,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:32","nodeType":"VariableDeclaration","scope":3813,"src":"2326:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3805,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3808,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:32","nodeType":"VariableDeclaration","scope":3813,"src":"2353:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3807,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3810,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:32","nodeType":"VariableDeclaration","scope":3813,"src":"2381:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3809,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3812,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:32","nodeType":"VariableDeclaration","scope":3813,"src":"2404:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3811,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:32","nodeType":"StructDefinition","scope":4080,"src":"2078:354:32","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":3814,"nodeType":"StructuredDocumentation","src":"2434:352:32","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":3835,"members":[{"constant":false,"id":3816,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:32","nodeType":"VariableDeclaration","scope":3835,"src":"2810:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3815,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3818,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:32","nodeType":"VariableDeclaration","scope":3835,"src":"2846:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3817,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3820,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:32","nodeType":"VariableDeclaration","scope":3835,"src":"2883:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3819,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3822,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:32","nodeType":"VariableDeclaration","scope":3835,"src":"2919:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3821,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3824,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:32","nodeType":"VariableDeclaration","scope":3835,"src":"2961:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3823,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3826,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:32","nodeType":"VariableDeclaration","scope":3835,"src":"2992:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3825,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3828,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:32","nodeType":"VariableDeclaration","scope":3835,"src":"3022:33:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3827,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3830,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:32","nodeType":"VariableDeclaration","scope":3835,"src":"3061:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3829,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3832,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:32","nodeType":"VariableDeclaration","scope":3835,"src":"3099:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3831,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3834,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:32","nodeType":"VariableDeclaration","scope":3835,"src":"3141:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3833,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:32","nodeType":"StructDefinition","scope":4080,"src":"2787:392:32","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":3836,"nodeType":"StructuredDocumentation","src":"3181:101:32","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":3859,"members":[{"constant":false,"id":3838,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:32","nodeType":"VariableDeclaration","scope":3859,"src":"3307:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3837,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3840,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:32","nodeType":"VariableDeclaration","scope":3859,"src":"3343:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3839,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3842,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:32","nodeType":"VariableDeclaration","scope":3859,"src":"3380:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3841,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3844,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:32","nodeType":"VariableDeclaration","scope":3859,"src":"3416:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3843,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3846,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:32","nodeType":"VariableDeclaration","scope":3859,"src":"3458:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3845,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3848,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:32","nodeType":"VariableDeclaration","scope":3859,"src":"3489:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3847,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3850,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:32","nodeType":"VariableDeclaration","scope":3859,"src":"3519:33:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3849,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3852,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:32","nodeType":"VariableDeclaration","scope":3859,"src":"3558:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3851,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3854,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:32","nodeType":"VariableDeclaration","scope":3859,"src":"3596:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3853,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3856,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:32","nodeType":"VariableDeclaration","scope":3859,"src":"3638:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3855,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3858,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:32","nodeType":"VariableDeclaration","scope":3859,"src":"3679:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3857,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:32","nodeType":"StructDefinition","scope":4080,"src":"3282:421:32","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":3860,"nodeType":"StructuredDocumentation","src":"3705:364:32","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":3869,"members":[{"constant":false,"id":3862,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:32","nodeType":"VariableDeclaration","scope":3869,"src":"4093:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3861,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3864,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:32","nodeType":"VariableDeclaration","scope":3869,"src":"4114:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3863,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3866,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:32","nodeType":"VariableDeclaration","scope":3869,"src":"4136:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3865,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3868,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:32","nodeType":"VariableDeclaration","scope":3869,"src":"4169:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3867,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:32","nodeType":"StructDefinition","scope":4080,"src":"4070:127:32","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":3870,"nodeType":"StructuredDocumentation","src":"4199:381:32","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":3877,"members":[{"constant":false,"id":3872,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:32","nodeType":"VariableDeclaration","scope":3877,"src":"4605:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3871,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3874,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:32","nodeType":"VariableDeclaration","scope":3877,"src":"4631:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3873,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3876,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:32","nodeType":"VariableDeclaration","scope":3877,"src":"4655:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3875,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:32","nodeType":"StructDefinition","scope":4080,"src":"4581:98:32","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":3878,"nodeType":"StructuredDocumentation","src":"4681:461:32","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":3885,"members":[{"constant":false,"id":3880,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:32","nodeType":"VariableDeclaration","scope":3885,"src":"5173:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3879,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3882,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:32","nodeType":"VariableDeclaration","scope":3885,"src":"5199:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3881,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3884,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:32","nodeType":"VariableDeclaration","scope":3885,"src":"5227:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3883,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:32","nodeType":"StructDefinition","scope":4080,"src":"5143:106:32","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":3886,"nodeType":"StructuredDocumentation","src":"9245:1024:32","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":3889,"members":[{"id":3887,"name":"STANDARD","nameLocation":"10291:8:32","nodeType":"EnumValue","src":"10291:8:32"},{"id":3888,"name":"WITH_RATE","nameLocation":"10305:9:32","nodeType":"EnumValue","src":"10305:9:32"}],"name":"TokenType","nameLocation":"10275:9:32","nodeType":"EnumDefinition","src":"10270:46:32"},{"canonicalName":"TokenConfig","documentation":{"id":3890,"nodeType":"StructuredDocumentation","src":"10318:915:32","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":3902,"members":[{"constant":false,"id":3893,"mutability":"mutable","name":"token","nameLocation":"11266:5:32","nodeType":"VariableDeclaration","scope":3902,"src":"11259:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3892,"nodeType":"UserDefinedTypeName","pathNode":{"id":3891,"name":"IERC20","nameLocations":["11259:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"11259:6:32"},"referencedDeclaration":9632,"src":"11259:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3896,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:32","nodeType":"VariableDeclaration","scope":3902,"src":"11277:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$3889","typeString":"enum TokenType"},"typeName":{"id":3895,"nodeType":"UserDefinedTypeName","pathNode":{"id":3894,"name":"TokenType","nameLocations":["11277:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":3889,"src":"11277:9:32"},"referencedDeclaration":3889,"src":"11277:9:32","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$3889","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":3899,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:32","nodeType":"VariableDeclaration","scope":3902,"src":"11302:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$91","typeString":"contract IRateProvider"},"typeName":{"id":3898,"nodeType":"UserDefinedTypeName","pathNode":{"id":3897,"name":"IRateProvider","nameLocations":["11302:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":91,"src":"11302:13:32"},"referencedDeclaration":91,"src":"11302:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$91","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":3901,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:32","nodeType":"VariableDeclaration","scope":3902,"src":"11334:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3900,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:32","nodeType":"StructDefinition","scope":4080,"src":"11234:121:32","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":3903,"nodeType":"StructuredDocumentation","src":"11357:592:32","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":3912,"members":[{"constant":false,"id":3906,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:32","nodeType":"VariableDeclaration","scope":3912,"src":"11973:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$3889","typeString":"enum TokenType"},"typeName":{"id":3905,"nodeType":"UserDefinedTypeName","pathNode":{"id":3904,"name":"TokenType","nameLocations":["11973:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":3889,"src":"11973:9:32"},"referencedDeclaration":3889,"src":"11973:9:32","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$3889","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":3909,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:32","nodeType":"VariableDeclaration","scope":3912,"src":"11998:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$91","typeString":"contract IRateProvider"},"typeName":{"id":3908,"nodeType":"UserDefinedTypeName","pathNode":{"id":3907,"name":"IRateProvider","nameLocations":["11998:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":91,"src":"11998:13:32"},"referencedDeclaration":91,"src":"11998:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$91","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":3911,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:32","nodeType":"VariableDeclaration","scope":3912,"src":"12030:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3910,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:32","nodeType":"StructDefinition","scope":4080,"src":"11950:101:32","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":3913,"nodeType":"StructuredDocumentation","src":"12053:761:32","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":3937,"members":[{"constant":false,"id":3916,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:32","nodeType":"VariableDeclaration","scope":3937,"src":"12837:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$3790","typeString":"PoolConfigBits"},"typeName":{"id":3915,"nodeType":"UserDefinedTypeName","pathNode":{"id":3914,"name":"PoolConfigBits","nameLocations":["12837:14:32"],"nodeType":"IdentifierPath","referencedDeclaration":3790,"src":"12837:14:32"},"referencedDeclaration":3790,"src":"12837:14:32","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$3790","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":3920,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:32","nodeType":"VariableDeclaration","scope":3937,"src":"12872:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3918,"nodeType":"UserDefinedTypeName","pathNode":{"id":3917,"name":"IERC20","nameLocations":["12872:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"12872:6:32"},"referencedDeclaration":9632,"src":"12872:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":3919,"nodeType":"ArrayTypeName","src":"12872:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3924,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:32","nodeType":"VariableDeclaration","scope":3937,"src":"12893:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$3912_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":3922,"nodeType":"UserDefinedTypeName","pathNode":{"id":3921,"name":"TokenInfo","nameLocations":["12893:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":3912,"src":"12893:9:32"},"referencedDeclaration":3912,"src":"12893:9:32","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$3912_storage_ptr","typeString":"struct TokenInfo"}},"id":3923,"nodeType":"ArrayTypeName","src":"12893:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$3912_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":3927,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:32","nodeType":"VariableDeclaration","scope":3937,"src":"12920:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3925,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3926,"nodeType":"ArrayTypeName","src":"12920:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3930,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:32","nodeType":"VariableDeclaration","scope":3937,"src":"12947:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3928,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3929,"nodeType":"ArrayTypeName","src":"12947:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3933,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:32","nodeType":"VariableDeclaration","scope":3937,"src":"12983:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3931,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3932,"nodeType":"ArrayTypeName","src":"12983:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3936,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:32","nodeType":"VariableDeclaration","scope":3937,"src":"13009:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3934,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3935,"nodeType":"ArrayTypeName","src":"13009:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:32","nodeType":"StructDefinition","scope":4080,"src":"12815:228:32","visibility":"public"},{"canonicalName":"Rounding","id":3940,"members":[{"id":3938,"name":"ROUND_UP","nameLocation":"13065:8:32","nodeType":"EnumValue","src":"13065:8:32"},{"id":3939,"name":"ROUND_DOWN","nameLocation":"13079:10:32","nodeType":"EnumValue","src":"13079:10:32"}],"name":"Rounding","nameLocation":"13050:8:32","nodeType":"EnumDefinition","src":"13045:46:32"},{"canonicalName":"SwapKind","id":3943,"members":[{"id":3941,"name":"EXACT_IN","nameLocation":"13318:8:32","nodeType":"EnumValue","src":"13318:8:32"},{"id":3942,"name":"EXACT_OUT","nameLocation":"13332:9:32","nodeType":"EnumValue","src":"13332:9:32"}],"name":"SwapKind","nameLocation":"13303:8:32","nodeType":"EnumDefinition","src":"13298:45:32"},{"canonicalName":"VaultSwapParams","documentation":{"id":3944,"nodeType":"StructuredDocumentation","src":"14089:558:32","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":3962,"members":[{"constant":false,"id":3947,"mutability":"mutable","name":"kind","nameLocation":"14686:4:32","nodeType":"VariableDeclaration","scope":3962,"src":"14677:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"},"typeName":{"id":3946,"nodeType":"UserDefinedTypeName","pathNode":{"id":3945,"name":"SwapKind","nameLocations":["14677:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":3943,"src":"14677:8:32"},"referencedDeclaration":3943,"src":"14677:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":3949,"mutability":"mutable","name":"pool","nameLocation":"14704:4:32","nodeType":"VariableDeclaration","scope":3962,"src":"14696:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3948,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3952,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:32","nodeType":"VariableDeclaration","scope":3962,"src":"14714:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3951,"nodeType":"UserDefinedTypeName","pathNode":{"id":3950,"name":"IERC20","nameLocations":["14714:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"14714:6:32"},"referencedDeclaration":9632,"src":"14714:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3955,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:32","nodeType":"VariableDeclaration","scope":3962,"src":"14734:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3954,"nodeType":"UserDefinedTypeName","pathNode":{"id":3953,"name":"IERC20","nameLocations":["14734:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"14734:6:32"},"referencedDeclaration":9632,"src":"14734:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3957,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:32","nodeType":"VariableDeclaration","scope":3962,"src":"14755:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3956,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3959,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:32","nodeType":"VariableDeclaration","scope":3962,"src":"14783:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3958,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3961,"mutability":"mutable","name":"userData","nameLocation":"14811:8:32","nodeType":"VariableDeclaration","scope":3962,"src":"14805:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":3960,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:32","nodeType":"StructDefinition","scope":4080,"src":"14648:174:32","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":3963,"nodeType":"StructuredDocumentation","src":"14824:530:32","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":3980,"members":[{"constant":false,"id":3966,"mutability":"mutable","name":"kind","nameLocation":"15392:4:32","nodeType":"VariableDeclaration","scope":3980,"src":"15383:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"},"typeName":{"id":3965,"nodeType":"UserDefinedTypeName","pathNode":{"id":3964,"name":"SwapKind","nameLocations":["15383:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":3943,"src":"15383:8:32"},"referencedDeclaration":3943,"src":"15383:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":3968,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:32","nodeType":"VariableDeclaration","scope":3980,"src":"15402:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3967,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3971,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:32","nodeType":"VariableDeclaration","scope":3980,"src":"15435:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3969,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3970,"nodeType":"ArrayTypeName","src":"15435:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3973,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:32","nodeType":"VariableDeclaration","scope":3980,"src":"15467:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3972,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3975,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:32","nodeType":"VariableDeclaration","scope":3980,"src":"15488:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3974,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3977,"mutability":"mutable","name":"router","nameLocation":"15518:6:32","nodeType":"VariableDeclaration","scope":3980,"src":"15510:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3976,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3979,"mutability":"mutable","name":"userData","nameLocation":"15536:8:32","nodeType":"VariableDeclaration","scope":3980,"src":"15530:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":3978,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:32","nodeType":"StructDefinition","scope":4080,"src":"15355:192:32","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":3981,"nodeType":"StructuredDocumentation","src":"15549:813:32","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":4009,"members":[{"constant":false,"id":3984,"mutability":"mutable","name":"kind","nameLocation":"16401:4:32","nodeType":"VariableDeclaration","scope":4009,"src":"16392:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"},"typeName":{"id":3983,"nodeType":"UserDefinedTypeName","pathNode":{"id":3982,"name":"SwapKind","nameLocations":["16392:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":3943,"src":"16392:8:32"},"referencedDeclaration":3943,"src":"16392:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":3987,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:32","nodeType":"VariableDeclaration","scope":4009,"src":"16411:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3986,"nodeType":"UserDefinedTypeName","pathNode":{"id":3985,"name":"IERC20","nameLocations":["16411:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"16411:6:32"},"referencedDeclaration":9632,"src":"16411:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3990,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:32","nodeType":"VariableDeclaration","scope":4009,"src":"16431:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":3989,"nodeType":"UserDefinedTypeName","pathNode":{"id":3988,"name":"IERC20","nameLocations":["16431:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"16431:6:32"},"referencedDeclaration":9632,"src":"16431:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3992,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:32","nodeType":"VariableDeclaration","scope":4009,"src":"16452:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3991,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3994,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:32","nodeType":"VariableDeclaration","scope":4009,"src":"16482:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3993,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:32","nodeType":"VariableDeclaration","scope":4009,"src":"16513:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3995,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3998,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:32","nodeType":"VariableDeclaration","scope":4009,"src":"16549:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3997,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4000,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:32","nodeType":"VariableDeclaration","scope":4009,"src":"16586:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3999,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4002,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:32","nodeType":"VariableDeclaration","scope":4009,"src":"16624:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4001,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4004,"mutability":"mutable","name":"router","nameLocation":"16665:6:32","nodeType":"VariableDeclaration","scope":4009,"src":"16657:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4003,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4006,"mutability":"mutable","name":"pool","nameLocation":"16685:4:32","nodeType":"VariableDeclaration","scope":4009,"src":"16677:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4005,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4008,"mutability":"mutable","name":"userData","nameLocation":"16701:8:32","nodeType":"VariableDeclaration","scope":4009,"src":"16695:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4007,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:32","nodeType":"StructDefinition","scope":4080,"src":"16363:349:32","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":4015,"members":[{"id":4010,"name":"PROPORTIONAL","nameLocation":"16951:12:32","nodeType":"EnumValue","src":"16951:12:32"},{"id":4011,"name":"UNBALANCED","nameLocation":"16969:10:32","nodeType":"EnumValue","src":"16969:10:32"},{"id":4012,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:32","nodeType":"EnumValue","src":"16985:22:32"},{"id":4013,"name":"DONATION","nameLocation":"17013:8:32","nodeType":"EnumValue","src":"17013:8:32"},{"id":4014,"name":"CUSTOM","nameLocation":"17027:6:32","nodeType":"EnumValue","src":"17027:6:32"}],"name":"AddLiquidityKind","nameLocation":"16928:16:32","nodeType":"EnumDefinition","src":"16923:112:32"},{"canonicalName":"AddLiquidityParams","documentation":{"id":4016,"nodeType":"StructuredDocumentation","src":"17037:320:32","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":4031,"members":[{"constant":false,"id":4018,"mutability":"mutable","name":"pool","nameLocation":"17398:4:32","nodeType":"VariableDeclaration","scope":4031,"src":"17390:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4017,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4020,"mutability":"mutable","name":"to","nameLocation":"17416:2:32","nodeType":"VariableDeclaration","scope":4031,"src":"17408:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4019,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4023,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:32","nodeType":"VariableDeclaration","scope":4031,"src":"17424:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4021,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4022,"nodeType":"ArrayTypeName","src":"17424:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4025,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:32","nodeType":"VariableDeclaration","scope":4031,"src":"17452:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4024,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4028,"mutability":"mutable","name":"kind","nameLocation":"17498:4:32","nodeType":"VariableDeclaration","scope":4031,"src":"17481:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"},"typeName":{"id":4027,"nodeType":"UserDefinedTypeName","pathNode":{"id":4026,"name":"AddLiquidityKind","nameLocations":["17481:16:32"],"nodeType":"IdentifierPath","referencedDeclaration":4015,"src":"17481:16:32"},"referencedDeclaration":4015,"src":"17481:16:32","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4015","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4030,"mutability":"mutable","name":"userData","nameLocation":"17514:8:32","nodeType":"VariableDeclaration","scope":4031,"src":"17508:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4029,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:32","nodeType":"StructDefinition","scope":4080,"src":"17358:167:32","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":4036,"members":[{"id":4032,"name":"PROPORTIONAL","nameLocation":"17770:12:32","nodeType":"EnumValue","src":"17770:12:32"},{"id":4033,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:32","nodeType":"EnumValue","src":"17788:21:32"},{"id":4034,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:32","nodeType":"EnumValue","src":"17815:22:32"},{"id":4035,"name":"CUSTOM","nameLocation":"17843:6:32","nodeType":"EnumValue","src":"17843:6:32"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:32","nodeType":"EnumDefinition","src":"17739:112:32"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":4037,"nodeType":"StructuredDocumentation","src":"17853:330:32","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":4052,"members":[{"constant":false,"id":4039,"mutability":"mutable","name":"pool","nameLocation":"18227:4:32","nodeType":"VariableDeclaration","scope":4052,"src":"18219:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4038,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4041,"mutability":"mutable","name":"from","nameLocation":"18245:4:32","nodeType":"VariableDeclaration","scope":4052,"src":"18237:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4040,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4043,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:32","nodeType":"VariableDeclaration","scope":4052,"src":"18255:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4042,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4046,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:32","nodeType":"VariableDeclaration","scope":4052,"src":"18283:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4044,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4045,"nodeType":"ArrayTypeName","src":"18283:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4049,"mutability":"mutable","name":"kind","nameLocation":"18332:4:32","nodeType":"VariableDeclaration","scope":4052,"src":"18312:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":4048,"nodeType":"UserDefinedTypeName","pathNode":{"id":4047,"name":"RemoveLiquidityKind","nameLocations":["18312:19:32"],"nodeType":"IdentifierPath","referencedDeclaration":4036,"src":"18312:19:32"},"referencedDeclaration":4036,"src":"18312:19:32","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4036","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4051,"mutability":"mutable","name":"userData","nameLocation":"18348:8:32","nodeType":"VariableDeclaration","scope":4052,"src":"18342:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4050,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:32","nodeType":"StructDefinition","scope":4080,"src":"18184:175:32","visibility":"public"},{"canonicalName":"WrappingDirection","id":4055,"members":[{"id":4053,"name":"WRAP","nameLocation":"18602:4:32","nodeType":"EnumValue","src":"18602:4:32"},{"id":4054,"name":"UNWRAP","nameLocation":"18612:6:32","nodeType":"EnumValue","src":"18612:6:32"}],"name":"WrappingDirection","nameLocation":"18578:17:32","nodeType":"EnumDefinition","src":"18573:47:32"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":4056,"nodeType":"StructuredDocumentation","src":"18622:499:32","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":4070,"members":[{"constant":false,"id":4059,"mutability":"mutable","name":"kind","nameLocation":"19169:4:32","nodeType":"VariableDeclaration","scope":4070,"src":"19160:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"},"typeName":{"id":4058,"nodeType":"UserDefinedTypeName","pathNode":{"id":4057,"name":"SwapKind","nameLocations":["19160:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":3943,"src":"19160:8:32"},"referencedDeclaration":3943,"src":"19160:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$3943","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4062,"mutability":"mutable","name":"direction","nameLocation":"19197:9:32","nodeType":"VariableDeclaration","scope":4070,"src":"19179:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4055","typeString":"enum WrappingDirection"},"typeName":{"id":4061,"nodeType":"UserDefinedTypeName","pathNode":{"id":4060,"name":"WrappingDirection","nameLocations":["19179:17:32"],"nodeType":"IdentifierPath","referencedDeclaration":4055,"src":"19179:17:32"},"referencedDeclaration":4055,"src":"19179:17:32","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4055","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":4065,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:32","nodeType":"VariableDeclaration","scope":4070,"src":"19212:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":4064,"nodeType":"UserDefinedTypeName","pathNode":{"id":4063,"name":"IERC4626","nameLocations":["19212:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"19212:8:32"},"referencedDeclaration":8902,"src":"19212:8:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":4067,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:32","nodeType":"VariableDeclaration","scope":4070,"src":"19239:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4066,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4069,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:32","nodeType":"VariableDeclaration","scope":4070,"src":"19267:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4068,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:32","nodeType":"StructDefinition","scope":4080,"src":"19122:164:32","visibility":"public"},{"constant":true,"id":4073,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:32","nodeType":"VariableDeclaration","scope":4080,"src":"19594:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4071,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":4072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:32","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":4076,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:32","nodeType":"VariableDeclaration","scope":4080,"src":"19631:42:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4074,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":4075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":4079,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:32","nodeType":"VariableDeclaration","scope":4080,"src":"19879:48:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4077,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":4078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:32","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:32"},"id":32},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[4159],"IAuthentication":[81]},"id":4160,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4081,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":4083,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4160,"sourceUnit":82,"src":"72:116:33","symbolAliases":[{"foreign":{"id":4082,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":81,"src":"81:15:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4085,"name":"IAuthentication","nameLocations":["625:15:33"],"nodeType":"IdentifierPath","referencedDeclaration":81,"src":"625:15:33"},"id":4086,"nodeType":"InheritanceSpecifier","src":"625:15:33"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":4084,"nodeType":"StructuredDocumentation","src":"190:398:33","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":4159,"linearizedBaseContracts":[4159,81],"name":"Authentication","nameLocation":"607:14:33","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4088,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:33","nodeType":"VariableDeclaration","scope":4159,"src":"647:48:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4087,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":4098,"nodeType":"Block","src":"1337:63:33","statements":[{"expression":{"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4094,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4088,"src":"1347:22:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4095,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4091,"src":"1372:21:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4097,"nodeType":"ExpressionStatement","src":"1347:46:33"}]},"documentation":{"id":4089,"nodeType":"StructuredDocumentation","src":"702:587:33","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":4099,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4091,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:33","nodeType":"VariableDeclaration","scope":4099,"src":"1306:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4090,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:33"},"returnParameters":{"id":4093,"nodeType":"ParameterList","parameters":[],"src":"1337:0:33"},"scope":4159,"src":"1294:106:33","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4106,"nodeType":"Block","src":"1549:49:33","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4102,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4130,"src":"1559:19:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4104,"nodeType":"ExpressionStatement","src":"1559:21:33"},{"id":4105,"nodeType":"PlaceholderStatement","src":"1590:1:33"}]},"documentation":{"id":4100,"nodeType":"StructuredDocumentation","src":"1406:114:33","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":4107,"name":"authenticate","nameLocation":"1534:12:33","nodeType":"ModifierDefinition","parameters":{"id":4101,"nodeType":"ParameterList","parameters":[],"src":"1546:2:33"},"src":"1525:73:33","virtual":false,"visibility":"internal"},{"body":{"id":4129,"nodeType":"Block","src":"1733:156:33","statements":[{"assignments":[4112],"declarations":[{"constant":false,"id":4112,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:33","nodeType":"VariableDeclaration","scope":4129,"src":"1743:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4111,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4117,"initialValue":{"arguments":[{"expression":{"id":4114,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:33","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":4113,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4148,"src":"1762:11:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":4116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:33"},{"condition":{"id":4123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:33","subExpression":{"arguments":[{"id":4119,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4112,"src":"1810:8:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":4120,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:33","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4118,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4158,"src":"1798:11:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":4122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4128,"nodeType":"IfStatement","src":"1793:90:33","trueBody":{"id":4127,"nodeType":"Block","src":"1833:50:33","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4124,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"1854:16:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4126,"nodeType":"RevertStatement","src":"1847:25:33"}]}}]},"documentation":{"id":4108,"nodeType":"StructuredDocumentation","src":"1604:79:33","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":4130,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:33","nodeType":"FunctionDefinition","parameters":{"id":4109,"nodeType":"ParameterList","parameters":[],"src":"1716:2:33"},"returnParameters":{"id":4110,"nodeType":"ParameterList","parameters":[],"src":"1733:0:33"},"scope":4159,"src":"1688:201:33","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[80],"body":{"id":4147,"nodeType":"Block","src":"2008:353:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":4142,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4088,"src":"2320:22:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4143,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4133,"src":"2344:8:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":4140,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:33","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:33","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:33","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4139,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:33","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4138,"id":4146,"nodeType":"Return","src":"2286:68:33"}]},"documentation":{"id":4131,"nodeType":"StructuredDocumentation","src":"1895:31:33","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":4148,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:33","nodeType":"FunctionDefinition","overrides":{"id":4135,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:33"},"parameters":{"id":4134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4133,"mutability":"mutable","name":"selector","nameLocation":"1959:8:33","nodeType":"VariableDeclaration","scope":4148,"src":"1952:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4132,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:33"},"returnParameters":{"id":4138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4148,"src":"1999:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4136,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:33"},"scope":4159,"src":"1931:430:33","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":4149,"nodeType":"StructuredDocumentation","src":"2367:304:33","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":4158,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:33","nodeType":"FunctionDefinition","parameters":{"id":4154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4151,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:33","nodeType":"VariableDeclaration","scope":4158,"src":"2697:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4153,"mutability":"mutable","name":"user","nameLocation":"2723:4:33","nodeType":"VariableDeclaration","scope":4158,"src":"2715:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4152,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:33"},"returnParameters":{"id":4157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4158,"src":"2760:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4155,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:33"},"scope":4159,"src":"2676:90:33","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4160,"src":"589:2179:33","usedErrors":[72],"usedEvents":[]}],"src":"46:2723:33"},"id":33},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[4191],"IERC20":[9632]},"id":4192,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4161,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:34"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4163,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4192,"sourceUnit":9633,"src":"72:72:34","symbolAliases":[{"foreign":{"id":4162,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":4164,"nodeType":"StructuredDocumentation","src":"146:71:34","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":4191,"linearizedBaseContracts":[4191],"name":"CastingHelpers","nameLocation":"225:14:34","nodeType":"ContractDefinition","nodes":[{"body":{"id":4176,"nodeType":"Block","src":"410:140:34","statements":[{"AST":{"nativeSrc":"501:43:34","nodeType":"YulBlock","src":"501:43:34","statements":[{"nativeSrc":"515:19:34","nodeType":"YulAssignment","src":"515:19:34","value":{"name":"addresses","nativeSrc":"525:9:34","nodeType":"YulIdentifier","src":"525:9:34"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:34","nodeType":"YulIdentifier","src":"515:6:34"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4168,"isOffset":false,"isSlot":false,"src":"525:9:34","valueSize":1},{"declaration":4173,"isOffset":false,"isSlot":false,"src":"515:6:34","valueSize":1}],"flags":["memory-safe"],"id":4175,"nodeType":"InlineAssembly","src":"476:68:34"}]},"documentation":{"id":4165,"nodeType":"StructuredDocumentation","src":"246:66:34","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":4177,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:34","nodeType":"FunctionDefinition","parameters":{"id":4169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4168,"mutability":"mutable","name":"addresses","nameLocation":"352:9:34","nodeType":"VariableDeclaration","scope":4177,"src":"335:26:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4166,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4167,"nodeType":"ArrayTypeName","src":"335:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:34"},"returnParameters":{"id":4174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4173,"mutability":"mutable","name":"tokens","nameLocation":"402:6:34","nodeType":"VariableDeclaration","scope":4177,"src":"386:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4171,"nodeType":"UserDefinedTypeName","pathNode":{"id":4170,"name":"IERC20","nameLocations":["386:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"386:6:34"},"referencedDeclaration":9632,"src":"386:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":4172,"nodeType":"ArrayTypeName","src":"386:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:34"},"scope":4191,"src":"317:233:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4189,"nodeType":"Block","src":"712:140:34","statements":[{"AST":{"nativeSrc":"803:43:34","nodeType":"YulBlock","src":"803:43:34","statements":[{"nativeSrc":"817:19:34","nodeType":"YulAssignment","src":"817:19:34","value":{"name":"tokens","nativeSrc":"830:6:34","nodeType":"YulIdentifier","src":"830:6:34"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:34","nodeType":"YulIdentifier","src":"817:9:34"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4186,"isOffset":false,"isSlot":false,"src":"817:9:34","valueSize":1},{"declaration":4182,"isOffset":false,"isSlot":false,"src":"830:6:34","valueSize":1}],"flags":["memory-safe"],"id":4188,"nodeType":"InlineAssembly","src":"778:68:34"}]},"documentation":{"id":4178,"nodeType":"StructuredDocumentation","src":"556:57:34","text":"@dev Returns an IERC20[] array as an address[] array."},"id":4190,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:34","nodeType":"FunctionDefinition","parameters":{"id":4183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4182,"mutability":"mutable","name":"tokens","nameLocation":"653:6:34","nodeType":"VariableDeclaration","scope":4190,"src":"637:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4180,"nodeType":"UserDefinedTypeName","pathNode":{"id":4179,"name":"IERC20","nameLocations":["637:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"637:6:34"},"referencedDeclaration":9632,"src":"637:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":4181,"nodeType":"ArrayTypeName","src":"637:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:34"},"returnParameters":{"id":4187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4186,"mutability":"mutable","name":"addresses","nameLocation":"701:9:34","nodeType":"VariableDeclaration","scope":4190,"src":"684:26:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4184,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4185,"nodeType":"ArrayTypeName","src":"684:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:34"},"scope":4191,"src":"618:234:34","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4192,"src":"217:637:34","usedErrors":[],"usedEvents":[]}],"src":"46:809:34"},"id":34},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[4191],"IERC20":[9632],"InputHelpers":[4492]},"id":4493,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4193,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:35"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4493,"sourceUnit":9633,"src":"72:72:35","symbolAliases":[{"foreign":{"id":4194,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":4197,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4493,"sourceUnit":4192,"src":"146:54:35","symbolAliases":[{"foreign":{"id":4196,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4191,"src":"155:14:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":4492,"linearizedBaseContracts":[4492],"name":"InputHelpers","nameLocation":"210:12:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4198,"nodeType":"StructuredDocumentation","src":"229:91:35","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":4200,"name":"InputLengthMismatch","nameLocation":"331:19:35","nodeType":"ErrorDefinition","parameters":{"id":4199,"nodeType":"ParameterList","parameters":[],"src":"350:2:35"},"src":"325:28:35"},{"documentation":{"id":4201,"nodeType":"StructuredDocumentation","src":"359:332:35","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":4203,"name":"MultipleNonZeroInputs","nameLocation":"702:21:35","nodeType":"ErrorDefinition","parameters":{"id":4202,"nodeType":"ParameterList","parameters":[],"src":"723:2:35"},"src":"696:30:35"},{"documentation":{"id":4204,"nodeType":"StructuredDocumentation","src":"732:298:35","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":4206,"name":"AllZeroInputs","nameLocation":"1041:13:35","nodeType":"ErrorDefinition","parameters":{"id":4205,"nodeType":"ParameterList","parameters":[],"src":"1054:2:35"},"src":"1035:22:35"},{"documentation":{"id":4207,"nodeType":"StructuredDocumentation","src":"1063:320:35","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":4209,"name":"TokensNotSorted","nameLocation":"1394:15:35","nodeType":"ErrorDefinition","parameters":{"id":4208,"nodeType":"ParameterList","parameters":[],"src":"1409:2:35"},"src":"1388:24:35"},{"body":{"id":4224,"nodeType":"Block","src":"1486:81:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4216,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4211,"src":"1500:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4217,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4213,"src":"1505:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4223,"nodeType":"IfStatement","src":"1496:65:35","trueBody":{"id":4222,"nodeType":"Block","src":"1508:53:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4219,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4200,"src":"1529:19:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4221,"nodeType":"RevertStatement","src":"1522:28:35"}]}}]},"id":4225,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:35","nodeType":"FunctionDefinition","parameters":{"id":4214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4211,"mutability":"mutable","name":"a","nameLocation":"1458:1:35","nodeType":"VariableDeclaration","scope":4225,"src":"1450:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4210,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4213,"mutability":"mutable","name":"b","nameLocation":"1469:1:35","nodeType":"VariableDeclaration","scope":4225,"src":"1461:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4212,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:35"},"returnParameters":{"id":4215,"nodeType":"ParameterList","parameters":[],"src":"1486:0:35"},"scope":4492,"src":"1418:149:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4246,"nodeType":"Block","src":"1652:91:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4234,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4227,"src":"1666:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4235,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4229,"src":"1671:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4237,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4229,"src":"1676:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4238,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4231,"src":"1681:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4245,"nodeType":"IfStatement","src":"1662:75:35","trueBody":{"id":4244,"nodeType":"Block","src":"1684:53:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4241,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4200,"src":"1705:19:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4243,"nodeType":"RevertStatement","src":"1698:28:35"}]}}]},"id":4247,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:35","nodeType":"FunctionDefinition","parameters":{"id":4232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4227,"mutability":"mutable","name":"a","nameLocation":"1613:1:35","nodeType":"VariableDeclaration","scope":4247,"src":"1605:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4226,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4229,"mutability":"mutable","name":"b","nameLocation":"1624:1:35","nodeType":"VariableDeclaration","scope":4247,"src":"1616:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4228,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4231,"mutability":"mutable","name":"c","nameLocation":"1635:1:35","nodeType":"VariableDeclaration","scope":4247,"src":"1627:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4230,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:35"},"returnParameters":{"id":4233,"nodeType":"ParameterList","parameters":[],"src":"1652:0:35"},"scope":4492,"src":"1573:170:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4305,"nodeType":"Block","src":"1938:451:35","statements":[{"assignments":[4256],"declarations":[{"constant":false,"id":4256,"mutability":"mutable","name":"length","nameLocation":"1956:6:35","nodeType":"VariableDeclaration","scope":4305,"src":"1948:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4255,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4259,"initialValue":{"expression":{"id":4257,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4250,"src":"1965:12:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:35","memberName":"length","nodeType":"MemberAccess","src":"1965:19:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:35"},{"expression":{"id":4262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4260,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4253,"src":"1994:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4261,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4256,"src":"2007:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4263,"nodeType":"ExpressionStatement","src":"1994:19:35"},{"body":{"id":4293,"nodeType":"Block","src":"2061:211:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4274,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4250,"src":"2079:12:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4276,"indexExpression":{"id":4275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4265,"src":"2092:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4292,"nodeType":"IfStatement","src":"2075:187:35","trueBody":{"id":4291,"nodeType":"Block","src":"2101:161:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4279,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4253,"src":"2123:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4280,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4256,"src":"2137:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4286,"nodeType":"IfStatement","src":"2119:97:35","trueBody":{"id":4285,"nodeType":"Block","src":"2145:71:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4282,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4203,"src":"2174:21:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4284,"nodeType":"RevertStatement","src":"2167:30:35"}]}},{"expression":{"id":4289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4287,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4253,"src":"2233:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4288,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4265,"src":"2246:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4290,"nodeType":"ExpressionStatement","src":"2233:14:35"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4268,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4265,"src":"2044:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4269,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4256,"src":"2048:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4294,"initializationExpression":{"assignments":[4265],"declarations":[{"constant":false,"id":4265,"mutability":"mutable","name":"i","nameLocation":"2037:1:35","nodeType":"VariableDeclaration","scope":4294,"src":"2029:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4264,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4267,"initialValue":{"hexValue":"30","id":4266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:35","subExpression":{"id":4271,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4265,"src":"2058:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4273,"nodeType":"ExpressionStatement","src":"2056:3:35"},"nodeType":"ForStatement","src":"2024:248:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4295,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4253,"src":"2286:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4296,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4256,"src":"2300:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4302,"nodeType":"IfStatement","src":"2282:73:35","trueBody":{"id":4301,"nodeType":"Block","src":"2308:47:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4298,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4206,"src":"2329:13:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4300,"nodeType":"RevertStatement","src":"2322:22:35"}]}},{"expression":{"id":4303,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4253,"src":"2372:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4254,"id":4304,"nodeType":"Return","src":"2365:17:35"}]},"id":4306,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:35","nodeType":"FunctionDefinition","parameters":{"id":4251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4250,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:35","nodeType":"VariableDeclaration","scope":4306,"src":"1864:29:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4248,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4249,"nodeType":"ArrayTypeName","src":"1864:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:35"},"returnParameters":{"id":4254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4253,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:35","nodeType":"VariableDeclaration","scope":4306,"src":"1918:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4252,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:35"},"scope":4492,"src":"1835:554:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4383,"nodeType":"Block","src":"3138:376:35","statements":[{"body":{"id":4379,"nodeType":"Block","src":"3196:288:35","statements":[{"body":{"id":4377,"nodeType":"Block","src":"3262:212:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"id":4354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4346,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3284:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4348,"indexExpression":{"id":4347,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3291:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":4349,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3296:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4353,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4350,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3303:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"3284:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4376,"nodeType":"IfStatement","src":"3280:180:35","trueBody":{"id":4375,"nodeType":"Block","src":"3311:149:35","statements":[{"expression":{"id":4373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":4355,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3387:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4357,"indexExpression":{"id":4356,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3394:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"baseExpression":{"id":4358,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3398:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4362,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4359,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3405:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"id":4363,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$9632_$_t_contract$_IERC20_$9632_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":4364,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3416:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4368,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4365,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3423:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"baseExpression":{"id":4369,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3431:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4371,"indexExpression":{"id":4370,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3438:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"id":4372,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$9632_$_t_contract$_IERC20_$9632_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:35","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4374,"nodeType":"ExpressionStatement","src":"3386:55:35"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4335,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3230:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4336,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3234:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:35","memberName":"length","nodeType":"MemberAccess","src":"3234:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4338,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4319,"src":"3250:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4378,"initializationExpression":{"assignments":[4332],"declarations":[{"constant":false,"id":4332,"mutability":"mutable","name":"j","nameLocation":"3223:1:35","nodeType":"VariableDeclaration","scope":4378,"src":"3215:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4331,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4334,"initialValue":{"hexValue":"30","id":4333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:35","subExpression":{"id":4343,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4332,"src":"3259:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4345,"nodeType":"ExpressionStatement","src":"3257:3:35"},"nodeType":"ForStatement","src":"3210:264:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4322,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4319,"src":"3168:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4323,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3172:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:35","memberName":"length","nodeType":"MemberAccess","src":"3172:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4380,"initializationExpression":{"assignments":[4319],"declarations":[{"constant":false,"id":4319,"mutability":"mutable","name":"i","nameLocation":"3161:1:35","nodeType":"VariableDeclaration","scope":4380,"src":"3153:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4318,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4321,"initialValue":{"hexValue":"30","id":4320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:35","subExpression":{"id":4328,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4319,"src":"3193:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4330,"nodeType":"ExpressionStatement","src":"3191:3:35"},"nodeType":"ForStatement","src":"3148:336:35"},{"expression":{"id":4381,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4311,"src":"3501:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":4317,"id":4382,"nodeType":"Return","src":"3494:13:35"}]},"documentation":{"id":4307,"nodeType":"StructuredDocumentation","src":"2395:654:35","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":4384,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:35","nodeType":"FunctionDefinition","parameters":{"id":4312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4311,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:35","nodeType":"VariableDeclaration","scope":4384,"src":"3074:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4309,"nodeType":"UserDefinedTypeName","pathNode":{"id":4308,"name":"IERC20","nameLocations":["3074:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3074:6:35"},"referencedDeclaration":9632,"src":"3074:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":4310,"nodeType":"ArrayTypeName","src":"3074:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:35"},"returnParameters":{"id":4317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4384,"src":"3121:15:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4314,"nodeType":"UserDefinedTypeName","pathNode":{"id":4313,"name":"IERC20","nameLocations":["3121:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3121:6:35"},"referencedDeclaration":9632,"src":"3121:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":4315,"nodeType":"ArrayTypeName","src":"3121:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:35"},"scope":4492,"src":"3054:460:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4438,"nodeType":"Block","src":"3686:341:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4392,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"3700:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:35","memberName":"length","nodeType":"MemberAccess","src":"3700:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4398,"nodeType":"IfStatement","src":"3696:54:35","trueBody":{"id":4397,"nodeType":"Block","src":"3719:31:35","statements":[{"functionReturnParameters":4391,"id":4396,"nodeType":"Return","src":"3733:7:35"}]}},{"assignments":[4401],"declarations":[{"constant":false,"id":4401,"mutability":"mutable","name":"previous","nameLocation":"3767:8:35","nodeType":"VariableDeclaration","scope":4438,"src":"3760:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":4400,"nodeType":"UserDefinedTypeName","pathNode":{"id":4399,"name":"IERC20","nameLocations":["3760:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3760:6:35"},"referencedDeclaration":9632,"src":"3760:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4405,"initialValue":{"baseExpression":{"id":4402,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"3778:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4404,"indexExpression":{"hexValue":"30","id":4403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:35"},{"body":{"id":4436,"nodeType":"Block","src":"3842:179:35","statements":[{"assignments":[4419],"declarations":[{"constant":false,"id":4419,"mutability":"mutable","name":"current","nameLocation":"3863:7:35","nodeType":"VariableDeclaration","scope":4436,"src":"3856:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":4418,"nodeType":"UserDefinedTypeName","pathNode":{"id":4417,"name":"IERC20","nameLocations":["3856:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3856:6:35"},"referencedDeclaration":9632,"src":"3856:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4423,"initialValue":{"baseExpression":{"id":4420,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"3873:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4422,"indexExpression":{"id":4421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4407,"src":"3880:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:35"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"id":4426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4424,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4401,"src":"3901:8:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4425,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4419,"src":"3912:7:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"3901:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4431,"nodeType":"IfStatement","src":"3897:81:35","trueBody":{"id":4430,"nodeType":"Block","src":"3921:57:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4427,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4209,"src":"3946:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4429,"nodeType":"RevertStatement","src":"3939:24:35"}]}},{"expression":{"id":4434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4432,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4401,"src":"3992:8:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4433,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4419,"src":"4003:7:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"3992:18:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":4435,"nodeType":"ExpressionStatement","src":"3992:18:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4410,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4407,"src":"3818:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4411,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"3822:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:35","memberName":"length","nodeType":"MemberAccess","src":"3822:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4437,"initializationExpression":{"assignments":[4407],"declarations":[{"constant":false,"id":4407,"mutability":"mutable","name":"i","nameLocation":"3811:1:35","nodeType":"VariableDeclaration","scope":4437,"src":"3803:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4406,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4409,"initialValue":{"hexValue":"31","id":4408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:35","subExpression":{"id":4414,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4407,"src":"3839:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4416,"nodeType":"ExpressionStatement","src":"3837:3:35"},"nodeType":"ForStatement","src":"3798:223:35"}]},"documentation":{"id":4385,"nodeType":"StructuredDocumentation","src":"3520:95:35","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":4439,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:35","nodeType":"FunctionDefinition","parameters":{"id":4390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4389,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:35","nodeType":"VariableDeclaration","scope":4439,"src":"3648:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4387,"nodeType":"UserDefinedTypeName","pathNode":{"id":4386,"name":"IERC20","nameLocations":["3648:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3648:6:35"},"referencedDeclaration":9632,"src":"3648:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":4388,"nodeType":"ArrayTypeName","src":"3648:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:35"},"returnParameters":{"id":4391,"nodeType":"ParameterList","parameters":[],"src":"3686:0:35"},"scope":4492,"src":"3620:407:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4490,"nodeType":"Block","src":"4203:347:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4446,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4217:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:35","memberName":"length","nodeType":"MemberAccess","src":"4217:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4452,"nodeType":"IfStatement","src":"4213:55:35","trueBody":{"id":4451,"nodeType":"Block","src":"4237:31:35","statements":[{"functionReturnParameters":4445,"id":4450,"nodeType":"Return","src":"4251:7:35"}]}},{"assignments":[4454],"declarations":[{"constant":false,"id":4454,"mutability":"mutable","name":"previous","nameLocation":"4286:8:35","nodeType":"VariableDeclaration","scope":4490,"src":"4278:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4453,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4458,"initialValue":{"baseExpression":{"id":4455,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4297:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4457,"indexExpression":{"hexValue":"30","id":4456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:35"},{"body":{"id":4488,"nodeType":"Block","src":"4363:181:35","statements":[{"assignments":[4471],"declarations":[{"constant":false,"id":4471,"mutability":"mutable","name":"current","nameLocation":"4385:7:35","nodeType":"VariableDeclaration","scope":4488,"src":"4377:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4470,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4475,"initialValue":{"baseExpression":{"id":4472,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4395:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4474,"indexExpression":{"id":4473,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4460,"src":"4403:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4476,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"4424:8:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4477,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4471,"src":"4435:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4483,"nodeType":"IfStatement","src":"4420:81:35","trueBody":{"id":4482,"nodeType":"Block","src":"4444:57:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4479,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4209,"src":"4469:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4481,"nodeType":"RevertStatement","src":"4462:24:35"}]}},{"expression":{"id":4486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4484,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"4515:8:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4485,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4471,"src":"4526:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4487,"nodeType":"ExpressionStatement","src":"4515:18:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4463,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4460,"src":"4338:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4464,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4443,"src":"4342:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:35","memberName":"length","nodeType":"MemberAccess","src":"4342:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4489,"initializationExpression":{"assignments":[4460],"declarations":[{"constant":false,"id":4460,"mutability":"mutable","name":"i","nameLocation":"4331:1:35","nodeType":"VariableDeclaration","scope":4489,"src":"4323:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4459,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4462,"initialValue":{"hexValue":"31","id":4461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:35","subExpression":{"id":4467,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4460,"src":"4360:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4469,"nodeType":"ExpressionStatement","src":"4358:3:35"},"nodeType":"ForStatement","src":"4318:226:35"}]},"documentation":{"id":4440,"nodeType":"StructuredDocumentation","src":"4033:96:35","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":4491,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:35","nodeType":"FunctionDefinition","parameters":{"id":4444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4443,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:35","nodeType":"VariableDeclaration","scope":4491,"src":"4163:24:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4441,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4442,"nodeType":"ArrayTypeName","src":"4163:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:35"},"returnParameters":{"id":4445,"nodeType":"ParameterList","parameters":[],"src":"4203:0:35"},"scope":4492,"src":"4134:416:35","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4493,"src":"202:4350:35","usedErrors":[4200,4203,4206,4209],"usedEvents":[]}],"src":"46:4507:35"},"id":35},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","exportedSymbols":{"RevertCodec":[4582]},"id":4583,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4494,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:36"},{"abstract":false,"baseContracts":[],"canonicalName":"RevertCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":4495,"nodeType":"StructuredDocumentation","src":"111:120:36","text":"@notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data."},"fullyImplemented":true,"id":4582,"linearizedBaseContracts":[4582],"name":"RevertCodec","nameLocation":"239:11:36","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4496,"nodeType":"StructuredDocumentation","src":"257:183:36","text":" @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n @param result The result of the query operation"},"errorSelector":"5ab64fb8","id":4500,"name":"Result","nameLocation":"451:6:36","nodeType":"ErrorDefinition","parameters":{"id":4499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4498,"mutability":"mutable","name":"result","nameLocation":"464:6:36","nodeType":"VariableDeclaration","scope":4500,"src":"458:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4497,"name":"bytes","nodeType":"ElementaryTypeName","src":"458:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"457:14:36"},"src":"445:27:36"},{"documentation":{"id":4501,"nodeType":"StructuredDocumentation","src":"478:79:36","text":"@notice Handle the \"reverted without a reason\" case (i.e., no return data)."},"errorSelector":"a7285689","id":4503,"name":"ErrorSelectorNotFound","nameLocation":"568:21:36","nodeType":"ErrorDefinition","parameters":{"id":4502,"nodeType":"ParameterList","parameters":[],"src":"589:2:36"},"src":"562:30:36"},{"body":{"id":4543,"nodeType":"Block","src":"687:559:36","statements":[{"assignments":[4511],"declarations":[{"constant":false,"id":4511,"mutability":"mutable","name":"errorSelector","nameLocation":"704:13:36","nodeType":"VariableDeclaration","scope":4543,"src":"697:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4510,"name":"bytes4","nodeType":"ElementaryTypeName","src":"697:6:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":4516,"initialValue":{"arguments":[{"id":4514,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4505,"src":"746:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4512,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"720:11:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":4513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"732:13:36","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"720:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":4515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"720:36:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"697:59:36"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4517,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4511,"src":"770:13:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":4518,"name":"Result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4500,"src":"787:6:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":4519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"794:8:36","memberName":"selector","nodeType":"MemberAccess","src":"787:15:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"770:32:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4528,"nodeType":"IfStatement","src":"766:185:36","trueBody":{"id":4527,"nodeType":"Block","src":"804:147:36","statements":[{"expression":{"arguments":[{"id":4524,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4505,"src":"930:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4521,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"903:11:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":4523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"915:14:36","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4581,"src":"903:26:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":4525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:37:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4526,"nodeType":"ExpressionStatement","src":"903:37:36"}]}},{"assignments":[4530],"declarations":[{"constant":false,"id":4530,"mutability":"mutable","name":"resultRawLength","nameLocation":"969:15:36","nodeType":"VariableDeclaration","scope":4543,"src":"961:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4529,"name":"uint256","nodeType":"ElementaryTypeName","src":"961:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4533,"initialValue":{"expression":{"id":4531,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4505,"src":"987:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"997:6:36","memberName":"length","nodeType":"MemberAccess","src":"987:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"961:42:36"},{"AST":{"nativeSrc":"1038:154:36","nodeType":"YulBlock","src":"1038:154:36","statements":[{"nativeSrc":"1052:33:36","nodeType":"YulAssignment","src":"1052:33:36","value":{"arguments":[{"name":"resultRaw","nativeSrc":"1069:9:36","nodeType":"YulIdentifier","src":"1069:9:36"},{"kind":"number","nativeSrc":"1080:4:36","nodeType":"YulLiteral","src":"1080:4:36","type":"","value":"0x04"}],"functionName":{"name":"add","nativeSrc":"1065:3:36","nodeType":"YulIdentifier","src":"1065:3:36"},"nativeSrc":"1065:20:36","nodeType":"YulFunctionCall","src":"1065:20:36"},"variableNames":[{"name":"resultRaw","nativeSrc":"1052:9:36","nodeType":"YulIdentifier","src":"1052:9:36"}]},{"expression":{"arguments":[{"name":"resultRaw","nativeSrc":"1126:9:36","nodeType":"YulIdentifier","src":"1126:9:36"},{"arguments":[{"name":"resultRawLength","nativeSrc":"1141:15:36","nodeType":"YulIdentifier","src":"1141:15:36"},{"kind":"number","nativeSrc":"1158:1:36","nodeType":"YulLiteral","src":"1158:1:36","type":"","value":"4"}],"functionName":{"name":"sub","nativeSrc":"1137:3:36","nodeType":"YulIdentifier","src":"1137:3:36"},"nativeSrc":"1137:23:36","nodeType":"YulFunctionCall","src":"1137:23:36"}],"functionName":{"name":"mstore","nativeSrc":"1119:6:36","nodeType":"YulIdentifier","src":"1119:6:36"},"nativeSrc":"1119:42:36","nodeType":"YulFunctionCall","src":"1119:42:36"},"nativeSrc":"1119:42:36","nodeType":"YulExpressionStatement","src":"1119:42:36"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4505,"isOffset":false,"isSlot":false,"src":"1052:9:36","valueSize":1},{"declaration":4505,"isOffset":false,"isSlot":false,"src":"1069:9:36","valueSize":1},{"declaration":4505,"isOffset":false,"isSlot":false,"src":"1126:9:36","valueSize":1},{"declaration":4530,"isOffset":false,"isSlot":false,"src":"1141:15:36","valueSize":1}],"flags":["memory-safe"],"id":4534,"nodeType":"InlineAssembly","src":"1013:179:36"},{"expression":{"arguments":[{"id":4537,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4505,"src":"1220:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":4539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1232:5:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4538,"name":"bytes","nodeType":"ElementaryTypeName","src":"1232:5:36","typeDescriptions":{}}}],"id":4540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1231:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}],"expression":{"id":4535,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1209:3:36","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1213:6:36","memberName":"decode","nodeType":"MemberAccess","src":"1209:10:36","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":4541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1209:30:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4509,"id":4542,"nodeType":"Return","src":"1202:37:36"}]},"id":4544,"implemented":true,"kind":"function","modifiers":[],"name":"catchEncodedResult","nameLocation":"607:18:36","nodeType":"FunctionDefinition","parameters":{"id":4506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4505,"mutability":"mutable","name":"resultRaw","nameLocation":"639:9:36","nodeType":"VariableDeclaration","scope":4544,"src":"626:22:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4504,"name":"bytes","nodeType":"ElementaryTypeName","src":"626:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"625:24:36"},"returnParameters":{"id":4509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4508,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4544,"src":"673:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4507,"name":"bytes","nodeType":"ElementaryTypeName","src":"673:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"672:14:36"},"scope":4582,"src":"598:648:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4562,"nodeType":"Block","src":"1429:258:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4552,"name":"callResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4547,"src":"1443:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1454:6:36","memberName":"length","nodeType":"MemberAccess","src":"1443:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"34","id":4554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1463:1:36","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1443:21:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4560,"nodeType":"IfStatement","src":"1439:82:36","trueBody":{"id":4559,"nodeType":"Block","src":"1466:55:36","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4556,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"1487:21:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4558,"nodeType":"RevertStatement","src":"1480:30:36"}]}},{"AST":{"nativeSrc":"1555:126:36","nodeType":"YulBlock","src":"1555:126:36","statements":[{"nativeSrc":"1569:45:36","nodeType":"YulAssignment","src":"1569:45:36","value":{"arguments":[{"arguments":[{"name":"callResult","nativeSrc":"1596:10:36","nodeType":"YulIdentifier","src":"1596:10:36"},{"kind":"number","nativeSrc":"1608:4:36","nodeType":"YulLiteral","src":"1608:4:36","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1592:3:36","nodeType":"YulIdentifier","src":"1592:3:36"},"nativeSrc":"1592:21:36","nodeType":"YulFunctionCall","src":"1592:21:36"}],"functionName":{"name":"mload","nativeSrc":"1586:5:36","nodeType":"YulIdentifier","src":"1586:5:36"},"nativeSrc":"1586:28:36","nodeType":"YulFunctionCall","src":"1586:28:36"},"variableNames":[{"name":"errorSelector","nativeSrc":"1569:13:36","nodeType":"YulIdentifier","src":"1569:13:36"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4547,"isOffset":false,"isSlot":false,"src":"1596:10:36","valueSize":1},{"declaration":4550,"isOffset":false,"isSlot":false,"src":"1569:13:36","valueSize":1}],"flags":["memory-safe"],"id":4561,"nodeType":"InlineAssembly","src":"1530:151:36"}]},"documentation":{"id":4545,"nodeType":"StructuredDocumentation","src":"1252:79:36","text":"@dev Returns the first 4 bytes in an array, reverting if the length is < 4."},"id":4563,"implemented":true,"kind":"function","modifiers":[],"name":"parseSelector","nameLocation":"1345:13:36","nodeType":"FunctionDefinition","parameters":{"id":4548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4547,"mutability":"mutable","name":"callResult","nameLocation":"1372:10:36","nodeType":"VariableDeclaration","scope":4563,"src":"1359:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4546,"name":"bytes","nodeType":"ElementaryTypeName","src":"1359:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1358:25:36"},"returnParameters":{"id":4551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4550,"mutability":"mutable","name":"errorSelector","nameLocation":"1414:13:36","nodeType":"VariableDeclaration","scope":4563,"src":"1407:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4549,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1407:6:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1406:22:36"},"scope":4582,"src":"1336:351:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4580,"nodeType":"Block","src":"1804:441:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4569,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4566,"src":"1881:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1892:6:36","memberName":"length","nodeType":"MemberAccess","src":"1881:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1901:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1881:21:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4578,"nodeType":"Block","src":"2184:55:36","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4575,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"2205:21:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4577,"nodeType":"RevertStatement","src":"2198:30:36"}]},"id":4579,"nodeType":"IfStatement","src":"1877:362:36","trueBody":{"id":4574,"nodeType":"Block","src":"1904:274:36","statements":[{"AST":{"nativeSrc":"2033:135:36","nodeType":"YulBlock","src":"2033:135:36","statements":[{"nativeSrc":"2051:41:36","nodeType":"YulVariableDeclaration","src":"2051:41:36","value":{"arguments":[{"name":"returnData","nativeSrc":"2081:10:36","nodeType":"YulIdentifier","src":"2081:10:36"}],"functionName":{"name":"mload","nativeSrc":"2075:5:36","nodeType":"YulIdentifier","src":"2075:5:36"},"nativeSrc":"2075:17:36","nodeType":"YulFunctionCall","src":"2075:17:36"},"variables":[{"name":"return_data_size","nativeSrc":"2055:16:36","nodeType":"YulTypedName","src":"2055:16:36","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2120:2:36","nodeType":"YulLiteral","src":"2120:2:36","type":"","value":"32"},{"name":"returnData","nativeSrc":"2124:10:36","nodeType":"YulIdentifier","src":"2124:10:36"}],"functionName":{"name":"add","nativeSrc":"2116:3:36","nodeType":"YulIdentifier","src":"2116:3:36"},"nativeSrc":"2116:19:36","nodeType":"YulFunctionCall","src":"2116:19:36"},{"name":"return_data_size","nativeSrc":"2137:16:36","nodeType":"YulIdentifier","src":"2137:16:36"}],"functionName":{"name":"revert","nativeSrc":"2109:6:36","nodeType":"YulIdentifier","src":"2109:6:36"},"nativeSrc":"2109:45:36","nodeType":"YulFunctionCall","src":"2109:45:36"},"nativeSrc":"2109:45:36","nodeType":"YulExpressionStatement","src":"2109:45:36"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4566,"isOffset":false,"isSlot":false,"src":"2081:10:36","valueSize":1},{"declaration":4566,"isOffset":false,"isSlot":false,"src":"2124:10:36","valueSize":1}],"flags":["memory-safe"],"id":4573,"nodeType":"InlineAssembly","src":"2008:160:36"}]}}]},"documentation":{"id":4564,"nodeType":"StructuredDocumentation","src":"1693:43:36","text":"@dev Taken from Openzeppelin's Address."},"id":4581,"implemented":true,"kind":"function","modifiers":[],"name":"bubbleUpRevert","nameLocation":"1750:14:36","nodeType":"FunctionDefinition","parameters":{"id":4567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4566,"mutability":"mutable","name":"returnData","nameLocation":"1778:10:36","nodeType":"VariableDeclaration","scope":4581,"src":"1765:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4565,"name":"bytes","nodeType":"ElementaryTypeName","src":"1765:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1764:25:36"},"returnParameters":{"id":4568,"nodeType":"ParameterList","parameters":[],"src":"1804:0:36"},"scope":4582,"src":"1741:504:36","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4583,"src":"231:2016:36","usedErrors":[4500,4503],"usedEvents":[]}],"src":"46:2202:36"},"id":36},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","exportedSymbols":{"IVersion":[101],"Version":[4622]},"id":4623,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4584,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:37"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","id":4586,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4623,"sourceUnit":102,"src":"72:102:37","symbolAliases":[{"foreign":{"id":4585,"name":"IVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":101,"src":"81:8:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4588,"name":"IVersion","nameLocations":["686:8:37"],"nodeType":"IdentifierPath","referencedDeclaration":101,"src":"686:8:37"},"id":4589,"nodeType":"InheritanceSpecifier","src":"686:8:37"}],"canonicalName":"Version","contractDependencies":[],"contractKind":"contract","documentation":{"id":4587,"nodeType":"StructuredDocumentation","src":"176:489:37","text":" @notice Retrieves a contract's version from storage.\n @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n are not yet supported.\n Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n detailed information about the deployment. For instance:\n `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`"},"fullyImplemented":true,"id":4622,"linearizedBaseContracts":[4622,101],"name":"Version","nameLocation":"675:7:37","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4591,"mutability":"mutable","name":"_version","nameLocation":"716:8:37","nodeType":"VariableDeclaration","scope":4622,"src":"701:23:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":4590,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":4600,"nodeType":"Block","src":"767:38:37","statements":[{"expression":{"arguments":[{"id":4597,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4593,"src":"789:8:37","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4596,"name":"_setVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4621,"src":"777:11:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":4598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:21:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4599,"nodeType":"ExpressionStatement","src":"777:21:37"}]},"id":4601,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4593,"mutability":"mutable","name":"version_","nameLocation":"757:8:37","nodeType":"VariableDeclaration","scope":4601,"src":"743:22:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4592,"name":"string","nodeType":"ElementaryTypeName","src":"743:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"742:24:37"},"returnParameters":{"id":4595,"nodeType":"ParameterList","parameters":[],"src":"767:0:37"},"scope":4622,"src":"731:74:37","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[100],"body":{"id":4609,"nodeType":"Block","src":"974:32:37","statements":[{"expression":{"id":4607,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4591,"src":"991:8:37","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":4606,"id":4608,"nodeType":"Return","src":"984:15:37"}]},"documentation":{"id":4602,"nodeType":"StructuredDocumentation","src":"811:101:37","text":" @notice Getter for the version.\n @return version The stored contract version"},"functionSelector":"54fd4d50","id":4610,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"926:7:37","nodeType":"FunctionDefinition","parameters":{"id":4603,"nodeType":"ParameterList","parameters":[],"src":"933:2:37"},"returnParameters":{"id":4606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4610,"src":"959:13:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4604,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"958:15:37"},"scope":4622,"src":"917:89:37","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4620,"nodeType":"Block","src":"1146:38:37","statements":[{"expression":{"id":4618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4616,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4591,"src":"1156:8:37","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4617,"name":"newVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4613,"src":"1167:10:37","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1156:21:37","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":4619,"nodeType":"ExpressionStatement","src":"1156:21:37"}]},"documentation":{"id":4611,"nodeType":"StructuredDocumentation","src":"1012:73:37","text":"@dev Internal setter that allows this contract to be used in proxies."},"id":4621,"implemented":true,"kind":"function","modifiers":[],"name":"_setVersion","nameLocation":"1099:11:37","nodeType":"FunctionDefinition","parameters":{"id":4614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4613,"mutability":"mutable","name":"newVersion","nameLocation":"1125:10:37","nodeType":"VariableDeclaration","scope":4621,"src":"1111:24:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4612,"name":"string","nodeType":"ElementaryTypeName","src":"1111:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1110:26:37"},"returnParameters":{"id":4615,"nodeType":"ParameterList","parameters":[],"src":"1146:0:37"},"scope":4622,"src":"1090:94:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4623,"src":"666:520:37","usedErrors":[],"usedEvents":[]}],"src":"46:1141:37"},"id":37},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[4921],"LogExpMath":[6277]},"id":4922,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4624,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:38"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":4626,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4922,"sourceUnit":6278,"src":"72:46:38","symbolAliases":[{"foreign":{"id":4625,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6277,"src":"81:10:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":4627,"nodeType":"StructuredDocumentation","src":"120:119:38","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":4921,"linearizedBaseContracts":[4921],"name":"FixedPoint","nameLocation":"247:10:38","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4628,"nodeType":"StructuredDocumentation","src":"264:39:38","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":4630,"name":"ZeroDivision","nameLocation":"314:12:38","nodeType":"ErrorDefinition","parameters":{"id":4629,"nodeType":"ParameterList","parameters":[],"src":"326:2:38"},"src":"308:21:38"},{"constant":true,"id":4633,"mutability":"constant","name":"ONE","nameLocation":"459:3:38","nodeType":"VariableDeclaration","scope":4921,"src":"433:36:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4631,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":4632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:38","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4638,"mutability":"constant","name":"TWO","nameLocation":"522:3:38","nodeType":"VariableDeclaration","scope":4921,"src":"496:39:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4634,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:38","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4636,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"532:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4643,"mutability":"constant","name":"FOUR","nameLocation":"567:4:38","nodeType":"VariableDeclaration","scope":4921,"src":"541:40:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4639,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4642,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":4640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:38","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4641,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"578:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4646,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:38","nodeType":"VariableDeclaration","scope":4921,"src":"587:56:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4644,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":4645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:38","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":4665,"nodeType":"Block","src":"733:148:38","statements":[{"assignments":[4656],"declarations":[{"constant":false,"id":4656,"mutability":"mutable","name":"product","nameLocation":"828:7:38","nodeType":"VariableDeclaration","scope":4665,"src":"820:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4655,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4660,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4657,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"838:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4658,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4650,"src":"842:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4661,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"861:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4662,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"871:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4654,"id":4664,"nodeType":"Return","src":"854:20:38"}]},"id":4666,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:38","nodeType":"FunctionDefinition","parameters":{"id":4651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4648,"mutability":"mutable","name":"a","nameLocation":"687:1:38","nodeType":"VariableDeclaration","scope":4666,"src":"679:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4647,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4650,"mutability":"mutable","name":"b","nameLocation":"698:1:38","nodeType":"VariableDeclaration","scope":4666,"src":"690:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4649,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:38"},"returnParameters":{"id":4654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4666,"src":"724:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4652,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:38"},"scope":4921,"src":"662:219:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4682,"nodeType":"Block","src":"963:351:38","statements":[{"assignments":[4676],"declarations":[{"constant":false,"id":4676,"mutability":"mutable","name":"product","nameLocation":"1058:7:38","nodeType":"VariableDeclaration","scope":4682,"src":"1050:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4675,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4680,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4677,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4668,"src":"1068:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4678,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4670,"src":"1072:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:38"},{"AST":{"nativeSrc":"1211:97:38","nodeType":"YulBlock","src":"1211:97:38","statements":[{"nativeSrc":"1225:73:38","nodeType":"YulAssignment","src":"1225:73:38","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:38","nodeType":"YulIdentifier","src":"1253:7:38"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:38","nodeType":"YulIdentifier","src":"1246:6:38"},"nativeSrc":"1246:15:38","nodeType":"YulFunctionCall","src":"1246:15:38"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:38","nodeType":"YulIdentifier","src":"1239:6:38"},"nativeSrc":"1239:23:38","nodeType":"YulFunctionCall","src":"1239:23:38"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:38","nodeType":"YulIdentifier","src":"1276:7:38"},{"kind":"number","nativeSrc":"1285:1:38","nodeType":"YulLiteral","src":"1285:1:38","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:38","nodeType":"YulIdentifier","src":"1272:3:38"},"nativeSrc":"1272:15:38","nodeType":"YulFunctionCall","src":"1272:15:38"},{"name":"ONE","nativeSrc":"1289:3:38","nodeType":"YulIdentifier","src":"1289:3:38"}],"functionName":{"name":"div","nativeSrc":"1268:3:38","nodeType":"YulIdentifier","src":"1268:3:38"},"nativeSrc":"1268:25:38","nodeType":"YulFunctionCall","src":"1268:25:38"},{"kind":"number","nativeSrc":"1295:1:38","nodeType":"YulLiteral","src":"1295:1:38","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:38","nodeType":"YulIdentifier","src":"1264:3:38"},"nativeSrc":"1264:33:38","nodeType":"YulFunctionCall","src":"1264:33:38"}],"functionName":{"name":"mul","nativeSrc":"1235:3:38","nodeType":"YulIdentifier","src":"1235:3:38"},"nativeSrc":"1235:63:38","nodeType":"YulFunctionCall","src":"1235:63:38"},"variableNames":[{"name":"result","nativeSrc":"1225:6:38","nodeType":"YulIdentifier","src":"1225:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4633,"isOffset":false,"isSlot":false,"src":"1289:3:38","valueSize":1},{"declaration":4676,"isOffset":false,"isSlot":false,"src":"1253:7:38","valueSize":1},{"declaration":4676,"isOffset":false,"isSlot":false,"src":"1276:7:38","valueSize":1},{"declaration":4673,"isOffset":false,"isSlot":false,"src":"1225:6:38","valueSize":1}],"flags":["memory-safe"],"id":4681,"nodeType":"InlineAssembly","src":"1186:122:38"}]},"id":4683,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:38","nodeType":"FunctionDefinition","parameters":{"id":4671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4668,"mutability":"mutable","name":"a","nameLocation":"910:1:38","nodeType":"VariableDeclaration","scope":4683,"src":"902:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4667,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4670,"mutability":"mutable","name":"b","nameLocation":"921:1:38","nodeType":"VariableDeclaration","scope":4683,"src":"913:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4669,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:38"},"returnParameters":{"id":4674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4673,"mutability":"mutable","name":"result","nameLocation":"955:6:38","nodeType":"VariableDeclaration","scope":4683,"src":"947:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4672,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:38"},"scope":4921,"src":"887:427:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4702,"nodeType":"Block","src":"1391:254:38","statements":[{"assignments":[4693],"declarations":[{"constant":false,"id":4693,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:38","nodeType":"VariableDeclaration","scope":4702,"src":"1491:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4697,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4694,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4685,"src":"1511:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4695,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"1515:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4698,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"1625:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4699,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4687,"src":"1637:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4691,"id":4701,"nodeType":"Return","src":"1618:20:38"}]},"id":4703,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:38","nodeType":"FunctionDefinition","parameters":{"id":4688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4685,"mutability":"mutable","name":"a","nameLocation":"1345:1:38","nodeType":"VariableDeclaration","scope":4703,"src":"1337:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4684,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4687,"mutability":"mutable","name":"b","nameLocation":"1356:1:38","nodeType":"VariableDeclaration","scope":4703,"src":"1348:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4686,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:38"},"returnParameters":{"id":4691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4690,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4703,"src":"1382:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4689,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:38"},"scope":4921,"src":"1320:325:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4718,"nodeType":"Block","src":"1727:43:38","statements":[{"expression":{"arguments":[{"id":4713,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4705,"src":"1753:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4714,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"1756:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4715,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4707,"src":"1761:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4712,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4747,"src":"1744:8:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4711,"id":4717,"nodeType":"Return","src":"1737:26:38"}]},"id":4719,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:38","nodeType":"FunctionDefinition","parameters":{"id":4708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4705,"mutability":"mutable","name":"a","nameLocation":"1674:1:38","nodeType":"VariableDeclaration","scope":4719,"src":"1666:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4704,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4707,"mutability":"mutable","name":"b","nameLocation":"1685:1:38","nodeType":"VariableDeclaration","scope":4719,"src":"1677:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4706,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:38"},"returnParameters":{"id":4711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4710,"mutability":"mutable","name":"result","nameLocation":"1719:6:38","nodeType":"VariableDeclaration","scope":4719,"src":"1711:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4709,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:38"},"scope":4921,"src":"1651:119:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4746,"nodeType":"Block","src":"1912:774:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4731,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4726,"src":"2004:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4738,"nodeType":"IfStatement","src":"2000:58:38","trueBody":{"id":4737,"nodeType":"Block","src":"2012:46:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4734,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4630,"src":"2033:12:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4736,"nodeType":"RevertStatement","src":"2026:21:38"}]}},{"assignments":[4740],"declarations":[{"constant":false,"id":4740,"mutability":"mutable","name":"product","nameLocation":"2143:7:38","nodeType":"VariableDeclaration","scope":4746,"src":"2135:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4739,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4744,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4741,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4722,"src":"2153:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4742,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4724,"src":"2157:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:38"},{"AST":{"nativeSrc":"2585:95:38","nodeType":"YulBlock","src":"2585:95:38","statements":[{"nativeSrc":"2599:71:38","nodeType":"YulAssignment","src":"2599:71:38","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:38","nodeType":"YulIdentifier","src":"2627:7:38"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:38","nodeType":"YulIdentifier","src":"2620:6:38"},"nativeSrc":"2620:15:38","nodeType":"YulFunctionCall","src":"2620:15:38"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:38","nodeType":"YulIdentifier","src":"2613:6:38"},"nativeSrc":"2613:23:38","nodeType":"YulFunctionCall","src":"2613:23:38"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:38","nodeType":"YulIdentifier","src":"2650:7:38"},{"kind":"number","nativeSrc":"2659:1:38","nodeType":"YulLiteral","src":"2659:1:38","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:38","nodeType":"YulIdentifier","src":"2646:3:38"},"nativeSrc":"2646:15:38","nodeType":"YulFunctionCall","src":"2646:15:38"},{"name":"c","nativeSrc":"2663:1:38","nodeType":"YulIdentifier","src":"2663:1:38"}],"functionName":{"name":"div","nativeSrc":"2642:3:38","nodeType":"YulIdentifier","src":"2642:3:38"},"nativeSrc":"2642:23:38","nodeType":"YulFunctionCall","src":"2642:23:38"},{"kind":"number","nativeSrc":"2667:1:38","nodeType":"YulLiteral","src":"2667:1:38","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:38","nodeType":"YulIdentifier","src":"2638:3:38"},"nativeSrc":"2638:31:38","nodeType":"YulFunctionCall","src":"2638:31:38"}],"functionName":{"name":"mul","nativeSrc":"2609:3:38","nodeType":"YulIdentifier","src":"2609:3:38"},"nativeSrc":"2609:61:38","nodeType":"YulFunctionCall","src":"2609:61:38"},"variableNames":[{"name":"result","nativeSrc":"2599:6:38","nodeType":"YulIdentifier","src":"2599:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4726,"isOffset":false,"isSlot":false,"src":"2663:1:38","valueSize":1},{"declaration":4740,"isOffset":false,"isSlot":false,"src":"2627:7:38","valueSize":1},{"declaration":4740,"isOffset":false,"isSlot":false,"src":"2650:7:38","valueSize":1},{"declaration":4729,"isOffset":false,"isSlot":false,"src":"2599:6:38","valueSize":1}],"flags":["memory-safe"],"id":4745,"nodeType":"InlineAssembly","src":"2560:120:38"}]},"documentation":{"id":4720,"nodeType":"StructuredDocumentation","src":"1776:41:38","text":"@dev Return (a * b) / c, rounding up."},"id":4747,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:38","nodeType":"FunctionDefinition","parameters":{"id":4727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4722,"mutability":"mutable","name":"a","nameLocation":"1848:1:38","nodeType":"VariableDeclaration","scope":4747,"src":"1840:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4721,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4724,"mutability":"mutable","name":"b","nameLocation":"1859:1:38","nodeType":"VariableDeclaration","scope":4747,"src":"1851:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4723,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4726,"mutability":"mutable","name":"c","nameLocation":"1870:1:38","nodeType":"VariableDeclaration","scope":4747,"src":"1862:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4725,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:38"},"returnParameters":{"id":4730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4729,"mutability":"mutable","name":"result","nameLocation":"1904:6:38","nodeType":"VariableDeclaration","scope":4747,"src":"1896:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4728,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:38"},"scope":4921,"src":"1822:864:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4766,"nodeType":"Block","src":"3159:345:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4757,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4752,"src":"3251:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4764,"nodeType":"IfStatement","src":"3247:58:38","trueBody":{"id":4763,"nodeType":"Block","src":"3259:46:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4760,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4630,"src":"3280:12:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4762,"nodeType":"RevertStatement","src":"3273:21:38"}]}},{"AST":{"nativeSrc":"3415:83:38","nodeType":"YulBlock","src":"3415:83:38","statements":[{"nativeSrc":"3429:59:38","nodeType":"YulAssignment","src":"3429:59:38","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:38","nodeType":"YulIdentifier","src":"3457:1:38"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:38","nodeType":"YulIdentifier","src":"3450:6:38"},"nativeSrc":"3450:9:38","nodeType":"YulFunctionCall","src":"3450:9:38"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:38","nodeType":"YulIdentifier","src":"3443:6:38"},"nativeSrc":"3443:17:38","nodeType":"YulFunctionCall","src":"3443:17:38"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:38","nodeType":"YulLiteral","src":"3466:1:38","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:38","nodeType":"YulIdentifier","src":"3477:1:38"},{"kind":"number","nativeSrc":"3480:1:38","nodeType":"YulLiteral","src":"3480:1:38","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:38","nodeType":"YulIdentifier","src":"3473:3:38"},"nativeSrc":"3473:9:38","nodeType":"YulFunctionCall","src":"3473:9:38"},{"name":"b","nativeSrc":"3484:1:38","nodeType":"YulIdentifier","src":"3484:1:38"}],"functionName":{"name":"div","nativeSrc":"3469:3:38","nodeType":"YulIdentifier","src":"3469:3:38"},"nativeSrc":"3469:17:38","nodeType":"YulFunctionCall","src":"3469:17:38"}],"functionName":{"name":"add","nativeSrc":"3462:3:38","nodeType":"YulIdentifier","src":"3462:3:38"},"nativeSrc":"3462:25:38","nodeType":"YulFunctionCall","src":"3462:25:38"}],"functionName":{"name":"mul","nativeSrc":"3439:3:38","nodeType":"YulIdentifier","src":"3439:3:38"},"nativeSrc":"3439:49:38","nodeType":"YulFunctionCall","src":"3439:49:38"},"variableNames":[{"name":"result","nativeSrc":"3429:6:38","nodeType":"YulIdentifier","src":"3429:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4750,"isOffset":false,"isSlot":false,"src":"3457:1:38","valueSize":1},{"declaration":4750,"isOffset":false,"isSlot":false,"src":"3477:1:38","valueSize":1},{"declaration":4752,"isOffset":false,"isSlot":false,"src":"3484:1:38","valueSize":1},{"declaration":4755,"isOffset":false,"isSlot":false,"src":"3429:6:38","valueSize":1}],"flags":["memory-safe"],"id":4765,"nodeType":"InlineAssembly","src":"3390:108:38"}]},"documentation":{"id":4748,"nodeType":"StructuredDocumentation","src":"2692:383:38","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":4767,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:38","nodeType":"FunctionDefinition","parameters":{"id":4753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4750,"mutability":"mutable","name":"a","nameLocation":"3106:1:38","nodeType":"VariableDeclaration","scope":4767,"src":"3098:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4749,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4752,"mutability":"mutable","name":"b","nameLocation":"3117:1:38","nodeType":"VariableDeclaration","scope":4767,"src":"3109:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4751,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:38"},"returnParameters":{"id":4756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4755,"mutability":"mutable","name":"result","nameLocation":"3151:6:38","nodeType":"VariableDeclaration","scope":4767,"src":"3143:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4754,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:38"},"scope":4921,"src":"3080:424:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4842,"nodeType":"Block","src":"3807:723:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4777,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"3975:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4778,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3980:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4783,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"4028:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4784,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4638,"src":"4033:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4792,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"4093:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4793,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"4098:4:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4838,"nodeType":"Block","src":"4209:315:38","statements":[{"assignments":[4809],"declarations":[{"constant":false,"id":4809,"mutability":"mutable","name":"raw","nameLocation":"4231:3:38","nodeType":"VariableDeclaration","scope":4838,"src":"4223:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4808,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4815,"initialValue":{"arguments":[{"id":4812,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4770,"src":"4252:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4813,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"4255:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4810,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6277,"src":"4237:10:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6277_$","typeString":"type(library LogExpMath)"}},"id":4811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:38","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5180,"src":"4237:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:38"},{"assignments":[4817],"declarations":[{"constant":false,"id":4817,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:38","nodeType":"VariableDeclaration","scope":4838,"src":"4271:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4816,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4824,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4819,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4809,"src":"4296:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4820,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4646,"src":"4301:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4818,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"4290:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:38","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4825,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4809,"src":"4347:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4826,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4817,"src":"4353:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4836,"nodeType":"Block","src":"4410:104:38","statements":[{"id":4835,"nodeType":"UncheckedBlock","src":"4428:72:38","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4831,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4809,"src":"4467:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4832,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4817,"src":"4473:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4776,"id":4834,"nodeType":"Return","src":"4460:21:38"}]}]},"id":4837,"nodeType":"IfStatement","src":"4343:171:38","trueBody":{"id":4830,"nodeType":"Block","src":"4363:41:38","statements":[{"expression":{"hexValue":"30","id":4828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4776,"id":4829,"nodeType":"Return","src":"4381:8:38"}]}}]},"id":4839,"nodeType":"IfStatement","src":"4089:435:38","trueBody":{"id":4807,"nodeType":"Block","src":"4104:99:38","statements":[{"assignments":[4796],"declarations":[{"constant":false,"id":4796,"mutability":"mutable","name":"square","nameLocation":"4126:6:38","nodeType":"VariableDeclaration","scope":4807,"src":"4118:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4795,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4801,"initialValue":{"arguments":[{"id":4798,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4770,"src":"4143:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4799,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4770,"src":"4146:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4797,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4666,"src":"4135:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:38"},{"expression":{"arguments":[{"id":4803,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"4177:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4804,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"4185:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4802,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4666,"src":"4169:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4776,"id":4806,"nodeType":"Return","src":"4162:30:38"}]}},"id":4840,"nodeType":"IfStatement","src":"4024:500:38","trueBody":{"id":4791,"nodeType":"Block","src":"4038:45:38","statements":[{"expression":{"arguments":[{"id":4787,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4770,"src":"4067:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4788,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4770,"src":"4070:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4786,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4666,"src":"4059:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4776,"id":4790,"nodeType":"Return","src":"4052:20:38"}]}},"id":4841,"nodeType":"IfStatement","src":"3971:553:38","trueBody":{"id":4782,"nodeType":"Block","src":"3985:33:38","statements":[{"expression":{"id":4780,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4770,"src":"4006:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4776,"id":4781,"nodeType":"Return","src":"3999:8:38"}]}}]},"documentation":{"id":4768,"nodeType":"StructuredDocumentation","src":"3510:221:38","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":4843,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:38","nodeType":"FunctionDefinition","parameters":{"id":4773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4770,"mutability":"mutable","name":"x","nameLocation":"3761:1:38","nodeType":"VariableDeclaration","scope":4843,"src":"3753:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4769,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4772,"mutability":"mutable","name":"y","nameLocation":"3772:1:38","nodeType":"VariableDeclaration","scope":4843,"src":"3764:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4771,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:38"},"returnParameters":{"id":4776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4843,"src":"3798:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4774,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:38"},"scope":4921,"src":"3736:794:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4909,"nodeType":"Block","src":"4829:568:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4853,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"4997:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4854,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"5002:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4859,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"5050:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4860,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4638,"src":"5055:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4868,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"5113:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4869,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"5118:4:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4905,"nodeType":"Block","src":"5225:166:38","statements":[{"assignments":[4885],"declarations":[{"constant":false,"id":4885,"mutability":"mutable","name":"raw","nameLocation":"5247:3:38","nodeType":"VariableDeclaration","scope":4905,"src":"5239:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4884,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4891,"initialValue":{"arguments":[{"id":4888,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"5268:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4889,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"5271:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4886,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6277,"src":"5253:10:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6277_$","typeString":"type(library LogExpMath)"}},"id":4887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:38","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5180,"src":"5253:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:38"},{"assignments":[4893],"declarations":[{"constant":false,"id":4893,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:38","nodeType":"VariableDeclaration","scope":4905,"src":"5287:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4892,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4900,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4895,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4885,"src":"5312:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4896,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4646,"src":"5317:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4894,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"5306:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:38","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4901,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4885,"src":"5366:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4902,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"5372:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4852,"id":4904,"nodeType":"Return","src":"5359:21:38"}]},"id":4906,"nodeType":"IfStatement","src":"5109:282:38","trueBody":{"id":4883,"nodeType":"Block","src":"5124:95:38","statements":[{"assignments":[4872],"declarations":[{"constant":false,"id":4872,"mutability":"mutable","name":"square","nameLocation":"5146:6:38","nodeType":"VariableDeclaration","scope":4883,"src":"5138:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4871,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4877,"initialValue":{"arguments":[{"id":4874,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"5161:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4875,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"5164:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4873,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"5155:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:38"},{"expression":{"arguments":[{"id":4879,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4872,"src":"5193:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4880,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4872,"src":"5201:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4878,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"5187:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4852,"id":4882,"nodeType":"Return","src":"5180:28:38"}]}},"id":4907,"nodeType":"IfStatement","src":"5046:345:38","trueBody":{"id":4867,"nodeType":"Block","src":"5060:43:38","statements":[{"expression":{"arguments":[{"id":4863,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"5087:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4864,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"5090:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4862,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"5081:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4852,"id":4866,"nodeType":"Return","src":"5074:18:38"}]}},"id":4908,"nodeType":"IfStatement","src":"4993:398:38","trueBody":{"id":4858,"nodeType":"Block","src":"5007:33:38","statements":[{"expression":{"id":4856,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4846,"src":"5028:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4852,"id":4857,"nodeType":"Return","src":"5021:8:38"}]}}]},"documentation":{"id":4844,"nodeType":"StructuredDocumentation","src":"4536:219:38","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":4910,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:38","nodeType":"FunctionDefinition","parameters":{"id":4849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4846,"mutability":"mutable","name":"x","nameLocation":"4783:1:38","nodeType":"VariableDeclaration","scope":4910,"src":"4775:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4845,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4848,"mutability":"mutable","name":"y","nameLocation":"4794:1:38","nodeType":"VariableDeclaration","scope":4910,"src":"4786:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4847,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:38"},"returnParameters":{"id":4852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4851,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4910,"src":"4820:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4850,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:38"},"scope":4921,"src":"4760:637:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4919,"nodeType":"Block","src":"5750:175:38","statements":[{"AST":{"nativeSrc":"5857:62:38","nodeType":"YulBlock","src":"5857:62:38","statements":[{"nativeSrc":"5871:38:38","nodeType":"YulAssignment","src":"5871:38:38","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:38","nodeType":"YulIdentifier","src":"5888:1:38"},{"name":"ONE","nativeSrc":"5891:3:38","nodeType":"YulIdentifier","src":"5891:3:38"}],"functionName":{"name":"lt","nativeSrc":"5885:2:38","nodeType":"YulIdentifier","src":"5885:2:38"},"nativeSrc":"5885:10:38","nodeType":"YulFunctionCall","src":"5885:10:38"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:38","nodeType":"YulIdentifier","src":"5901:3:38"},{"name":"x","nativeSrc":"5906:1:38","nodeType":"YulIdentifier","src":"5906:1:38"}],"functionName":{"name":"sub","nativeSrc":"5897:3:38","nodeType":"YulIdentifier","src":"5897:3:38"},"nativeSrc":"5897:11:38","nodeType":"YulFunctionCall","src":"5897:11:38"}],"functionName":{"name":"mul","nativeSrc":"5881:3:38","nodeType":"YulIdentifier","src":"5881:3:38"},"nativeSrc":"5881:28:38","nodeType":"YulFunctionCall","src":"5881:28:38"},"variableNames":[{"name":"result","nativeSrc":"5871:6:38","nodeType":"YulIdentifier","src":"5871:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4633,"isOffset":false,"isSlot":false,"src":"5891:3:38","valueSize":1},{"declaration":4633,"isOffset":false,"isSlot":false,"src":"5901:3:38","valueSize":1},{"declaration":4916,"isOffset":false,"isSlot":false,"src":"5871:6:38","valueSize":1},{"declaration":4913,"isOffset":false,"isSlot":false,"src":"5888:1:38","valueSize":1},{"declaration":4913,"isOffset":false,"isSlot":false,"src":"5906:1:38","valueSize":1}],"flags":["memory-safe"],"id":4918,"nodeType":"InlineAssembly","src":"5832:87:38"}]},"documentation":{"id":4911,"nodeType":"StructuredDocumentation","src":"5403:272:38","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":4920,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:38","nodeType":"FunctionDefinition","parameters":{"id":4914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4913,"mutability":"mutable","name":"x","nameLocation":"5708:1:38","nodeType":"VariableDeclaration","scope":4920,"src":"5700:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4912,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:38"},"returnParameters":{"id":4917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4916,"mutability":"mutable","name":"result","nameLocation":"5742:6:38","nodeType":"VariableDeclaration","scope":4920,"src":"5734:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4915,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:38"},"scope":4921,"src":"5680:245:38","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4922,"src":"239:5688:38","usedErrors":[4630],"usedEvents":[]}],"src":"46:5882:38"},"id":38},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[6277]},"id":6278,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4923,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:39"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":4924,"nodeType":"StructuredDocumentation","src":"79:515:39","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":6277,"linearizedBaseContracts":[6277],"name":"LogExpMath","nameLocation":"603:10:39","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4925,"nodeType":"StructuredDocumentation","src":"620:79:39","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":4927,"name":"BaseOutOfBounds","nameLocation":"710:15:39","nodeType":"ErrorDefinition","parameters":{"id":4926,"nodeType":"ParameterList","parameters":[],"src":"725:2:39"},"src":"704:24:39"},{"documentation":{"id":4928,"nodeType":"StructuredDocumentation","src":"734:83:39","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":4930,"name":"ExponentOutOfBounds","nameLocation":"828:19:39","nodeType":"ErrorDefinition","parameters":{"id":4929,"nodeType":"ParameterList","parameters":[],"src":"847:2:39"},"src":"822:28:39"},{"documentation":{"id":4931,"nodeType":"StructuredDocumentation","src":"856:96:39","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":4933,"name":"ProductOutOfBounds","nameLocation":"963:18:39","nodeType":"ErrorDefinition","parameters":{"id":4932,"nodeType":"ParameterList","parameters":[],"src":"981:2:39"},"src":"957:27:39"},{"documentation":{"id":4934,"nodeType":"StructuredDocumentation","src":"990:109:39","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":4936,"name":"InvalidExponent","nameLocation":"1110:15:39","nodeType":"ErrorDefinition","parameters":{"id":4935,"nodeType":"ParameterList","parameters":[],"src":"1125:2:39"},"src":"1104:24:39"},{"documentation":{"id":4937,"nodeType":"StructuredDocumentation","src":"1134:119:39","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":4939,"name":"OutOfBounds","nameLocation":"1264:11:39","nodeType":"ErrorDefinition","parameters":{"id":4938,"nodeType":"ParameterList","parameters":[],"src":"1275:2:39"},"src":"1258:20:39"},{"constant":true,"id":4942,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:39","nodeType":"VariableDeclaration","scope":6277,"src":"1539:29:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4940,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":4941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:39","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4945,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:39","nodeType":"VariableDeclaration","scope":6277,"src":"1729:29:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4943,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":4944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":4948,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:39","nodeType":"VariableDeclaration","scope":6277,"src":"1764:29:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4946,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":4947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:39","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":4951,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:39","nodeType":"VariableDeclaration","scope":6277,"src":"2310:45:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4949,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":4950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:39","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":4955,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:39","nodeType":"VariableDeclaration","scope":6277,"src":"2361:45:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4952,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":4954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:39","subExpression":{"hexValue":"3431653138","id":4953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:39","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":4960,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:39","nodeType":"VariableDeclaration","scope":6277,"src":"2557:49:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4956,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4959,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4957,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"2593:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":4958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":4965,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:39","nodeType":"VariableDeclaration","scope":6277,"src":"2612:49:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4961,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4962,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"2648:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":4963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":4975,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:39","nodeType":"VariableDeclaration","scope":6277,"src":"2668:65:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4966,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":4969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":4968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:39","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:39","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":4972,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"2726:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4970,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:39","typeDescriptions":{}}},"id":4973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4978,"mutability":"constant","name":"x0","nameLocation":"2784:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"2768:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4976,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":4977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:39","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":4981,"mutability":"constant","name":"a0","nameLocation":"2840:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"2824:77:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4979,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":4980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:39","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":4984,"mutability":"constant","name":"x1","nameLocation":"2948:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"2932:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4982,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":4983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:39","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":4987,"mutability":"constant","name":"a1","nameLocation":"3003:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"2987:49:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4985,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":4986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:39","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":4990,"mutability":"constant","name":"x2","nameLocation":"3112:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3096:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4988,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":4989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:39","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":4993,"mutability":"constant","name":"a2","nameLocation":"3169:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3153:55:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4991,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":4992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:39","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":4996,"mutability":"constant","name":"x3","nameLocation":"3241:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3225:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4994,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":4995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:39","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":4999,"mutability":"constant","name":"a3","nameLocation":"3298:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3282:48:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4997,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":4998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:39","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":5002,"mutability":"constant","name":"x4","nameLocation":"3363:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3347:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5000,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":5001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:39","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":5005,"mutability":"constant","name":"a4","nameLocation":"3419:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3403:45:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5003,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":5004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:39","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":5008,"mutability":"constant","name":"x5","nameLocation":"3481:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3465:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5006,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":5007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:39","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":5011,"mutability":"constant","name":"a5","nameLocation":"3537:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3521:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5009,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":5010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:39","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":5014,"mutability":"constant","name":"x6","nameLocation":"3597:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3581:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5012,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":5013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:39","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5017,"mutability":"constant","name":"a6","nameLocation":"3653:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3637:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5015,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":5016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:39","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":5020,"mutability":"constant","name":"x7","nameLocation":"3712:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3696:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5018,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":5019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":5023,"mutability":"constant","name":"a7","nameLocation":"3768:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3752:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5021,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":5022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:39","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":5026,"mutability":"constant","name":"x8","nameLocation":"3827:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3811:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5024,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":5025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:39","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":5029,"mutability":"constant","name":"a8","nameLocation":"3883:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3867:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5027,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":5028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:39","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":5032,"mutability":"constant","name":"x9","nameLocation":"3942:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3926:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5030,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":5031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:39","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":5035,"mutability":"constant","name":"a9","nameLocation":"3998:2:39","nodeType":"VariableDeclaration","scope":6277,"src":"3982:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5033,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":5034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:39","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":5038,"mutability":"constant","name":"x10","nameLocation":"4057:3:39","nodeType":"VariableDeclaration","scope":6277,"src":"4041:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5036,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":5037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:39","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":5041,"mutability":"constant","name":"a10","nameLocation":"4114:3:39","nodeType":"VariableDeclaration","scope":6277,"src":"4098:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5039,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":5040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:39","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":5044,"mutability":"constant","name":"x11","nameLocation":"4175:3:39","nodeType":"VariableDeclaration","scope":6277,"src":"4159:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5042,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":5043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:39","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":5047,"mutability":"constant","name":"a11","nameLocation":"4231:3:39","nodeType":"VariableDeclaration","scope":6277,"src":"4215:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5045,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":5046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:39","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":5179,"nodeType":"Block","src":"4563:2233:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5057,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5052,"src":"4577:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5066,"nodeType":"IfStatement","src":"4573:131:39","trueBody":{"id":5065,"nodeType":"Block","src":"4585:119:39","statements":[{"expression":{"arguments":[{"id":5062,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"4686:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5060,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:39","typeDescriptions":{}}},"id":5063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5056,"id":5064,"nodeType":"Return","src":"4671:22:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5067,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5050,"src":"4718:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5073,"nodeType":"IfStatement","src":"4714:45:39","trueBody":{"id":5072,"nodeType":"Block","src":"4726:33:39","statements":[{"expression":{"hexValue":"30","id":5070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5056,"id":5071,"nodeType":"Return","src":"4740:8:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5074,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5050,"src":"5133:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":5075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:39","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5083,"nodeType":"IfStatement","src":"5129:68:39","trueBody":{"id":5082,"nodeType":"Block","src":"5148:49:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5079,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4927,"src":"5169:15:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5081,"nodeType":"RevertStatement","src":"5162:24:39"}]}},{"assignments":[5085],"declarations":[{"constant":false,"id":5085,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:39","nodeType":"VariableDeclaration","scope":5179,"src":"5206:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5084,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5090,"initialValue":{"arguments":[{"id":5088,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5050,"src":"5231:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:39","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5086,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:39","typeDescriptions":{}}},"id":5089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:39"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5091,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5052,"src":"5591:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5092,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4975,"src":"5596:19:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5098,"nodeType":"IfStatement","src":"5587:83:39","trueBody":{"id":5097,"nodeType":"Block","src":"5617:53:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5094,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4930,"src":"5638:19:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5096,"nodeType":"RevertStatement","src":"5631:28:39"}]}},{"assignments":[5100],"declarations":[{"constant":false,"id":5100,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:39","nodeType":"VariableDeclaration","scope":5179,"src":"5679:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5099,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5105,"initialValue":{"arguments":[{"id":5103,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5052,"src":"5704:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:39","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5101,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:39","typeDescriptions":{}}},"id":5104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:39"},{"assignments":[5107],"declarations":[{"constant":false,"id":5107,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:39","nodeType":"VariableDeclaration","scope":5179,"src":"5717:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5106,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5108,"nodeType":"VariableDeclarationStatement","src":"5717:19:39"},{"id":5157,"nodeType":"UncheckedBlock","src":"5746:790:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5109,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4960,"src":"5774:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5110,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5085,"src":"5794:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5112,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5085,"src":"5806:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5113,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4965,"src":"5817:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5151,"nodeType":"Block","src":"6418:72:39","statements":[{"expression":{"id":5149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5143,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5107,"src":"6436:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5145,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5085,"src":"6455:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5144,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"6451:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5147,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5100,"src":"6467:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5150,"nodeType":"ExpressionStatement","src":"6436:39:39"}]},"id":5152,"nodeType":"IfStatement","src":"5770:720:39","trueBody":{"id":5142,"nodeType":"Block","src":"5836:576:39","statements":[{"assignments":[5117],"declarations":[{"constant":false,"id":5117,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:39","nodeType":"VariableDeclaration","scope":5142,"src":"5854:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5116,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5121,"initialValue":{"arguments":[{"id":5119,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5085,"src":"5878:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5118,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6276,"src":"5871:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:39"},{"expression":{"id":5140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5122,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5107,"src":"6308:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5123,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5117,"src":"6325:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5124,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"6335:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5127,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5100,"src":"6345:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5129,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5117,"src":"6358:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":5130,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"6368:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5132,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5133,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5100,"src":"6378:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5135,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5136,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"6390:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5139,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5141,"nodeType":"ExpressionStatement","src":"6308:89:39"}]}},{"expression":{"id":5155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5153,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5107,"src":"6503:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5154,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"6519:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5156,"nodeType":"ExpressionStatement","src":"6503:22:39"}]},{"condition":{"id":5166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:39","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5158,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4955,"src":"6615:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5159,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5107,"src":"6639:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5161,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5107,"src":"6655:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5162,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"6671:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5165,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5171,"nodeType":"IfStatement","src":"6609:137:39","trueBody":{"id":5170,"nodeType":"Block","src":"6694:52:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5167,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4933,"src":"6715:18:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5169,"nodeType":"RevertStatement","src":"6708:27:39"}]}},{"expression":{"arguments":[{"arguments":[{"id":5175,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5107,"src":"6775:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5174,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5627,"src":"6771:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5172,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:39","typeDescriptions":{}}},"id":5177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5056,"id":5178,"nodeType":"Return","src":"6756:33:39"}]},"documentation":{"id":5048,"nodeType":"StructuredDocumentation","src":"4277:214:39","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":5180,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:39","nodeType":"FunctionDefinition","parameters":{"id":5053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5050,"mutability":"mutable","name":"x","nameLocation":"4517:1:39","nodeType":"VariableDeclaration","scope":5180,"src":"4509:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5049,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5052,"mutability":"mutable","name":"y","nameLocation":"4528:1:39","nodeType":"VariableDeclaration","scope":5180,"src":"4520:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5051,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:39"},"returnParameters":{"id":5056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5180,"src":"4554:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5054,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:39"},"scope":6277,"src":"4496:2300:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5626,"nodeType":"Block","src":"7064:6082:39","statements":[{"condition":{"id":5196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:39","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5188,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"7080:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5189,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4955,"src":"7085:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5191,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"7109:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5192,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"7114:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5201,"nodeType":"IfStatement","src":"7074:112:39","trueBody":{"id":5200,"nodeType":"Block","src":"7137:49:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5197,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4936,"src":"7158:15:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5199,"nodeType":"RevertStatement","src":"7151:24:39"}]}},{"assignments":[5203],"declarations":[{"constant":false,"id":5203,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:39","nodeType":"VariableDeclaration","scope":5626,"src":"7272:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5202,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5205,"initialValue":{"hexValue":"66616c7365","id":5204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:39"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5206,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"7316:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":5207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5220,"nodeType":"IfStatement","src":"7312:417:39","trueBody":{"id":5219,"nodeType":"Block","src":"7323:406:39","statements":[{"id":5214,"nodeType":"UncheckedBlock","src":"7633:49:39","statements":[{"expression":{"id":5212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5209,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"7661:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:39","subExpression":{"id":5210,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"7666:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5213,"nodeType":"ExpressionStatement","src":"7661:6:39"}]},{"expression":{"id":5217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5215,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5203,"src":"7695:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5218,"nodeType":"ExpressionStatement","src":"7695:23:39"}]}},{"assignments":[5222],"declarations":[{"constant":false,"id":5222,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:39","nodeType":"VariableDeclaration","scope":5626,"src":"9030:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5221,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5223,"nodeType":"VariableDeclarationStatement","src":"9030:14:39"},{"id":5259,"nodeType":"UncheckedBlock","src":"9054:457:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5224,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9082:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5225,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4978,"src":"9087:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5236,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9171:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5237,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4984,"src":"9176:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5252,"nodeType":"Block","src":"9256:74:39","statements":[{"expression":{"id":5250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5248,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"9274:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:39","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5251,"nodeType":"ExpressionStatement","src":"9274:11:39"}]},"id":5253,"nodeType":"IfStatement","src":"9167:163:39","trueBody":{"id":5247,"nodeType":"Block","src":"9180:70:39","statements":[{"expression":{"id":5241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5239,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9198:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5240,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4984,"src":"9203:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5242,"nodeType":"ExpressionStatement","src":"9198:7:39"},{"expression":{"id":5245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5243,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"9223:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5244,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4987,"src":"9233:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5246,"nodeType":"ExpressionStatement","src":"9223:12:39"}]}},"id":5254,"nodeType":"IfStatement","src":"9078:252:39","trueBody":{"id":5235,"nodeType":"Block","src":"9091:70:39","statements":[{"expression":{"id":5229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5227,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9109:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5228,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4978,"src":"9114:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5230,"nodeType":"ExpressionStatement","src":"9109:7:39"},{"expression":{"id":5233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5231,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"9134:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5232,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4981,"src":"9144:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5234,"nodeType":"ExpressionStatement","src":"9134:12:39"}]}},{"expression":{"id":5257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5255,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9492:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5258,"nodeType":"ExpressionStatement","src":"9492:8:39"}]},{"assignments":[5261],"declarations":[{"constant":false,"id":5261,"mutability":"mutable","name":"product","nameLocation":"9730:7:39","nodeType":"VariableDeclaration","scope":5626,"src":"9723:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5260,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5263,"initialValue":{"id":5262,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"9740:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:39"},{"id":5408,"nodeType":"UncheckedBlock","src":"9757:957:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5264,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9785:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5265,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"9790:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5281,"nodeType":"IfStatement","src":"9781:104:39","trueBody":{"id":5280,"nodeType":"Block","src":"9794:91:39","statements":[{"expression":{"id":5269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5267,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9812:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5268,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"9817:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5270,"nodeType":"ExpressionStatement","src":"9812:7:39"},{"expression":{"id":5278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5271,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"9837:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5272,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"9848:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5273,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4993,"src":"9858:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5275,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5276,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"9864:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5279,"nodeType":"ExpressionStatement","src":"9837:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5282,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9902:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5283,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4996,"src":"9907:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5299,"nodeType":"IfStatement","src":"9898:104:39","trueBody":{"id":5298,"nodeType":"Block","src":"9911:91:39","statements":[{"expression":{"id":5287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5285,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"9929:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5286,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4996,"src":"9934:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5288,"nodeType":"ExpressionStatement","src":"9929:7:39"},{"expression":{"id":5296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5289,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"9954:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5290,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"9965:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5291,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"9975:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5293,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5294,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"9981:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5297,"nodeType":"ExpressionStatement","src":"9954:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5300,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10019:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5301,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5002,"src":"10024:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5317,"nodeType":"IfStatement","src":"10015:104:39","trueBody":{"id":5316,"nodeType":"Block","src":"10028:91:39","statements":[{"expression":{"id":5305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5303,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10046:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5304,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5002,"src":"10051:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5306,"nodeType":"ExpressionStatement","src":"10046:7:39"},{"expression":{"id":5314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5307,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10071:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5308,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10082:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5309,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"10092:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5311,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5312,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"10098:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5315,"nodeType":"ExpressionStatement","src":"10071:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5318,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10136:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5319,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5008,"src":"10141:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5335,"nodeType":"IfStatement","src":"10132:104:39","trueBody":{"id":5334,"nodeType":"Block","src":"10145:91:39","statements":[{"expression":{"id":5323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5321,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10163:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5322,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5008,"src":"10168:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5324,"nodeType":"ExpressionStatement","src":"10163:7:39"},{"expression":{"id":5332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5325,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10188:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5326,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10199:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5327,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"10209:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5329,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5330,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"10215:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5333,"nodeType":"ExpressionStatement","src":"10188:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5336,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10253:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5337,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5014,"src":"10258:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5353,"nodeType":"IfStatement","src":"10249:104:39","trueBody":{"id":5352,"nodeType":"Block","src":"10262:91:39","statements":[{"expression":{"id":5341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5339,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10280:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5340,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5014,"src":"10285:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5342,"nodeType":"ExpressionStatement","src":"10280:7:39"},{"expression":{"id":5350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5343,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10305:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5344,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10316:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5345,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5017,"src":"10326:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5347,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5348,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"10332:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5351,"nodeType":"ExpressionStatement","src":"10305:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5354,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10370:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5355,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"10375:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5371,"nodeType":"IfStatement","src":"10366:104:39","trueBody":{"id":5370,"nodeType":"Block","src":"10379:91:39","statements":[{"expression":{"id":5359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5357,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10397:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5358,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"10402:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5360,"nodeType":"ExpressionStatement","src":"10397:7:39"},{"expression":{"id":5368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5361,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10422:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5362,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10433:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5363,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"10443:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5365,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5366,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"10449:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5369,"nodeType":"ExpressionStatement","src":"10422:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5372,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10487:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5373,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5026,"src":"10492:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5389,"nodeType":"IfStatement","src":"10483:104:39","trueBody":{"id":5388,"nodeType":"Block","src":"10496:91:39","statements":[{"expression":{"id":5377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5375,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10514:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5376,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5026,"src":"10519:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5378,"nodeType":"ExpressionStatement","src":"10514:7:39"},{"expression":{"id":5386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5379,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10539:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5380,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10550:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5381,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5029,"src":"10560:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5383,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5384,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"10566:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5387,"nodeType":"ExpressionStatement","src":"10539:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5390,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10604:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5391,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5032,"src":"10609:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5407,"nodeType":"IfStatement","src":"10600:104:39","trueBody":{"id":5406,"nodeType":"Block","src":"10613:91:39","statements":[{"expression":{"id":5395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5393,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"10631:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5394,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5032,"src":"10636:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5396,"nodeType":"ExpressionStatement","src":"10631:7:39"},{"expression":{"id":5404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5397,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10656:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5398,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"10667:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5399,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"10677:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5401,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5402,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"10683:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5405,"nodeType":"ExpressionStatement","src":"10656:33:39"}]}}]},{"assignments":[5410],"declarations":[{"constant":false,"id":5410,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:39","nodeType":"VariableDeclaration","scope":5626,"src":"11018:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5409,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5412,"initialValue":{"id":5411,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11037:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:39"},{"assignments":[5414],"declarations":[{"constant":false,"id":5414,"mutability":"mutable","name":"term","nameLocation":"11115:4:39","nodeType":"VariableDeclaration","scope":5626,"src":"11108:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5413,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5415,"nodeType":"VariableDeclarationStatement","src":"11108:11:39"},{"expression":{"id":5418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5416,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11228:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5417,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11235:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5419,"nodeType":"ExpressionStatement","src":"11228:8:39"},{"id":5625,"nodeType":"UncheckedBlock","src":"11246:1894:39","statements":[{"expression":{"id":5422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5420,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11270:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5421,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11283:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5423,"nodeType":"ExpressionStatement","src":"11270:17:39"},{"expression":{"id":5434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5424,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11536:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5425,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11545:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5426,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11552:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5429,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11557:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5431,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5435,"nodeType":"ExpressionStatement","src":"11536:32:39"},{"expression":{"id":5438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5436,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11582:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5437,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11595:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5439,"nodeType":"ExpressionStatement","src":"11582:17:39"},{"expression":{"id":5450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5440,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11614:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5441,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11623:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5442,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11630:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5444,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5445,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11635:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5447,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:39","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5451,"nodeType":"ExpressionStatement","src":"11614:32:39"},{"expression":{"id":5454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5452,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11660:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5453,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11673:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5455,"nodeType":"ExpressionStatement","src":"11660:17:39"},{"expression":{"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5456,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11692:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5457,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11701:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5458,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11708:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5460,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5461,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11713:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5463,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":5464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:39","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5467,"nodeType":"ExpressionStatement","src":"11692:32:39"},{"expression":{"id":5470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5468,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11738:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5469,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11751:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5471,"nodeType":"ExpressionStatement","src":"11738:17:39"},{"expression":{"id":5482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5472,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11770:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5473,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11779:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5474,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11786:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5476,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5477,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11791:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5479,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:39","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5483,"nodeType":"ExpressionStatement","src":"11770:32:39"},{"expression":{"id":5486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5484,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11816:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5485,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11829:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5487,"nodeType":"ExpressionStatement","src":"11816:17:39"},{"expression":{"id":5498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5488,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11848:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5489,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11857:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5490,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11864:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5492,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5493,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11869:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5495,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":5496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:39","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5499,"nodeType":"ExpressionStatement","src":"11848:32:39"},{"expression":{"id":5502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5500,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11894:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5501,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11907:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5503,"nodeType":"ExpressionStatement","src":"11894:17:39"},{"expression":{"id":5514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5504,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11926:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5505,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11935:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5506,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"11942:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5508,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5509,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"11947:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5511,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:39","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5515,"nodeType":"ExpressionStatement","src":"11926:32:39"},{"expression":{"id":5518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5516,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11972:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5517,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11985:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5519,"nodeType":"ExpressionStatement","src":"11972:17:39"},{"expression":{"id":5530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5520,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12004:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5521,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12013:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5522,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"12020:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5524,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5525,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"12025:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5527,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":5528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:39","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5531,"nodeType":"ExpressionStatement","src":"12004:32:39"},{"expression":{"id":5534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5532,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12050:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5533,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12063:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5535,"nodeType":"ExpressionStatement","src":"12050:17:39"},{"expression":{"id":5546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5536,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12082:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5537,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12091:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5538,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"12098:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5541,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"12103:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5543,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:39","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5547,"nodeType":"ExpressionStatement","src":"12082:32:39"},{"expression":{"id":5550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5548,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12128:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5549,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12141:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5551,"nodeType":"ExpressionStatement","src":"12128:17:39"},{"expression":{"id":5562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5552,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12160:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5553,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12169:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5554,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"12176:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5556,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5557,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"12181:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5559,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":5560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:39","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5563,"nodeType":"ExpressionStatement","src":"12160:33:39"},{"expression":{"id":5566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5564,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12207:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5565,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12220:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5567,"nodeType":"ExpressionStatement","src":"12207:17:39"},{"expression":{"id":5578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5568,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12239:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5569,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12248:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5570,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"12255:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5572,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5573,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"12260:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5575,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:39","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5579,"nodeType":"ExpressionStatement","src":"12239:33:39"},{"expression":{"id":5582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5580,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12286:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5581,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12299:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5583,"nodeType":"ExpressionStatement","src":"12286:17:39"},{"expression":{"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5584,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12318:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5585,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12327:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5586,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5183,"src":"12334:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5588,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5589,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"12339:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5591,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":5592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:39","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5595,"nodeType":"ExpressionStatement","src":"12318:33:39"},{"expression":{"id":5598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5596,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12365:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5597,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"12378:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5599,"nodeType":"ExpressionStatement","src":"12365:17:39"},{"assignments":[5601],"declarations":[{"constant":false,"id":5601,"mutability":"mutable","name":"result","nameLocation":"12914:6:39","nodeType":"VariableDeclaration","scope":5625,"src":"12907:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5600,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5614,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5602,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5261,"src":"12926:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5603,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12936:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5605,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5606,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"12949:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5608,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5609,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"12959:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5611,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:39"},{"expression":{"condition":{"id":5615,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5203,"src":"13075:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5622,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"13123:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:39","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5616,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"13095:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5617,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"13104:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5619,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5620,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"13114:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5187,"id":5624,"nodeType":"Return","src":"13068:61:39"}]}]},"documentation":{"id":5181,"nodeType":"StructuredDocumentation","src":"6802:203:39","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":5627,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:39","nodeType":"FunctionDefinition","parameters":{"id":5184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5183,"mutability":"mutable","name":"x","nameLocation":"7030:1:39","nodeType":"VariableDeclaration","scope":5627,"src":"7023:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5182,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:39"},"returnParameters":{"id":5187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5627,"src":"7056:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5185,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:39"},"scope":6277,"src":"7010:6136:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5700,"nodeType":"Block","src":"13315:861:39","statements":[{"assignments":[5638],"declarations":[{"constant":false,"id":5638,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:39","nodeType":"VariableDeclaration","scope":5700,"src":"13545:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5637,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5639,"nodeType":"VariableDeclarationStatement","src":"13545:14:39"},{"id":5664,"nodeType":"UncheckedBlock","src":"13569:214:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5640,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4960,"src":"13597:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5641,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5632,"src":"13617:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5643,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5632,"src":"13625:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5644,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4965,"src":"13632:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5662,"nodeType":"Block","src":"13712:61:39","statements":[{"expression":{"id":5660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5654,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"13730:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5656,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5632,"src":"13744:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5655,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"13740:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5658,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"13752:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5661,"nodeType":"ExpressionStatement","src":"13730:28:39"}]},"id":5663,"nodeType":"IfStatement","src":"13593:180:39","trueBody":{"id":5653,"nodeType":"Block","src":"13651:55:39","statements":[{"expression":{"id":5651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5647,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"13669:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5649,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5632,"src":"13686:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5648,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6276,"src":"13679:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5652,"nodeType":"ExpressionStatement","src":"13669:22:39"}]}}]},{"assignments":[5666],"declarations":[{"constant":false,"id":5666,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:39","nodeType":"VariableDeclaration","scope":5700,"src":"13793:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5665,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5667,"nodeType":"VariableDeclarationStatement","src":"13793:13:39"},{"id":5699,"nodeType":"UncheckedBlock","src":"13816:354:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5668,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4960,"src":"13844:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5669,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5630,"src":"13864:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5671,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5630,"src":"13871:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5672,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4965,"src":"13877:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5690,"nodeType":"Block","src":"13955:59:39","statements":[{"expression":{"id":5688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5682,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5666,"src":"13973:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5684,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5630,"src":"13986:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5683,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"13982:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5686,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"13993:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5689,"nodeType":"ExpressionStatement","src":"13973:26:39"}]},"id":5691,"nodeType":"IfStatement","src":"13840:174:39","trueBody":{"id":5681,"nodeType":"Block","src":"13896:53:39","statements":[{"expression":{"id":5679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5675,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5666,"src":"13914:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5677,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5630,"src":"13930:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5676,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6276,"src":"13923:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5680,"nodeType":"ExpressionStatement","src":"13914:20:39"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5692,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5666,"src":"14133:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5693,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"14142:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5695,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5696,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"14152:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5636,"id":5698,"nodeType":"Return","src":"14125:34:39"}]}]},"documentation":{"id":5628,"nodeType":"StructuredDocumentation","src":"13152:89:39","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":5701,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:39","nodeType":"FunctionDefinition","parameters":{"id":5633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5630,"mutability":"mutable","name":"arg","nameLocation":"13266:3:39","nodeType":"VariableDeclaration","scope":5701,"src":"13259:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5629,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":5632,"mutability":"mutable","name":"base","nameLocation":"13278:4:39","nodeType":"VariableDeclaration","scope":5701,"src":"13271:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5631,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:39"},"returnParameters":{"id":5636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5701,"src":"13307:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5634,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:39"},"scope":6277,"src":"13246:930:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5738,"nodeType":"Block","src":"14319:353:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5709,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5704,"src":"14416:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":5710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5716,"nodeType":"IfStatement","src":"14412:57:39","trueBody":{"id":5715,"nodeType":"Block","src":"14424:45:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5712,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4939,"src":"14445:11:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5714,"nodeType":"RevertStatement","src":"14438:20:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5717,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4960,"src":"14482:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5718,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5704,"src":"14502:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5720,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5704,"src":"14507:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5721,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4965,"src":"14511:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5736,"nodeType":"Block","src":"14628:38:39","statements":[{"expression":{"arguments":[{"id":5733,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5704,"src":"14653:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5732,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6121,"src":"14649:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5708,"id":5735,"nodeType":"Return","src":"14642:13:39"}]},"id":5737,"nodeType":"IfStatement","src":"14478:188:39","trueBody":{"id":5731,"nodeType":"Block","src":"14530:92:39","statements":[{"id":5730,"nodeType":"UncheckedBlock","src":"14544:68:39","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5725,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5704,"src":"14586:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5724,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6276,"src":"14579:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5727,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"14591:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5708,"id":5729,"nodeType":"Return","src":"14572:25:39"}]}]}}]},"documentation":{"id":5702,"nodeType":"StructuredDocumentation","src":"14182:79:39","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":5739,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:39","nodeType":"FunctionDefinition","parameters":{"id":5705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5704,"mutability":"mutable","name":"a","nameLocation":"14285:1:39","nodeType":"VariableDeclaration","scope":5739,"src":"14278:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5703,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:39"},"returnParameters":{"id":5708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5739,"src":"14311:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5706,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:39"},"scope":6277,"src":"14266:406:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6120,"nodeType":"Block","src":"14824:5531:39","statements":[{"assignments":[5748],"declarations":[{"constant":false,"id":5748,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:39","nodeType":"VariableDeclaration","scope":6120,"src":"14910:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5747,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5750,"initialValue":{"hexValue":"66616c7365","id":5749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:39"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5751,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"14954:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5752,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"14958:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5769,"nodeType":"IfStatement","src":"14950:381:39","trueBody":{"id":5768,"nodeType":"Block","src":"14966:365:39","statements":[{"id":5763,"nodeType":"UncheckedBlock","src":"15216:68:39","statements":[{"expression":{"id":5761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5754,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"15244:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5755,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"15249:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5756,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"15258:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5758,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5759,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"15268:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5762,"nodeType":"ExpressionStatement","src":"15244:25:39"}]},{"expression":{"id":5766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5764,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5748,"src":"15297:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5767,"nodeType":"ExpressionStatement","src":"15297:23:39"}]}},{"assignments":[5771],"declarations":[{"constant":false,"id":5771,"mutability":"mutable","name":"sum","nameLocation":"16663:3:39","nodeType":"VariableDeclaration","scope":6120,"src":"16656:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5770,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5773,"initialValue":{"hexValue":"30","id":5772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:39"},{"id":5992,"nodeType":"UncheckedBlock","src":"16680:1674:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5774,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"16708:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5775,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4981,"src":"16713:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5776,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"16718:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5788,"nodeType":"IfStatement","src":"16704:126:39","trueBody":{"id":5787,"nodeType":"Block","src":"16726:104:39","statements":[{"expression":{"id":5781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5779,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"16744:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5780,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4981,"src":"16749:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5782,"nodeType":"ExpressionStatement","src":"16744:7:39"},{"expression":{"id":5785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5783,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"16806:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5784,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4978,"src":"16813:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5786,"nodeType":"ExpressionStatement","src":"16806:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5789,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"16848:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5792,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5790,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4987,"src":"16853:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5791,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"16858:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5803,"nodeType":"IfStatement","src":"16844:126:39","trueBody":{"id":5802,"nodeType":"Block","src":"16866:104:39","statements":[{"expression":{"id":5796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5794,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"16884:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5795,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4987,"src":"16889:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5797,"nodeType":"ExpressionStatement","src":"16884:7:39"},{"expression":{"id":5800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5798,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"16946:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5799,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4984,"src":"16953:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5801,"nodeType":"ExpressionStatement","src":"16946:9:39"}]}},{"expression":{"id":5806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5804,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17109:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5807,"nodeType":"ExpressionStatement","src":"17109:10:39"},{"expression":{"id":5810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5808,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17133:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5811,"nodeType":"ExpressionStatement","src":"17133:8:39"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5812,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17276:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5813,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4993,"src":"17281:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5829,"nodeType":"IfStatement","src":"17272:94:39","trueBody":{"id":5828,"nodeType":"Block","src":"17285:81:39","statements":[{"expression":{"id":5822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5815,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17303:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5816,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17308:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5817,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17312:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5819,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5820,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4993,"src":"17322:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5823,"nodeType":"ExpressionStatement","src":"17303:21:39"},{"expression":{"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5824,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17342:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5825,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"17349:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5827,"nodeType":"ExpressionStatement","src":"17342:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5830,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17384:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5831,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"17389:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5847,"nodeType":"IfStatement","src":"17380:94:39","trueBody":{"id":5846,"nodeType":"Block","src":"17393:81:39","statements":[{"expression":{"id":5840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5833,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17411:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5834,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17416:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5835,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17420:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5837,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5838,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"17430:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5841,"nodeType":"ExpressionStatement","src":"17411:21:39"},{"expression":{"id":5844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5842,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17450:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5843,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4996,"src":"17457:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5845,"nodeType":"ExpressionStatement","src":"17450:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5848,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17492:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5849,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"17497:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5865,"nodeType":"IfStatement","src":"17488:94:39","trueBody":{"id":5864,"nodeType":"Block","src":"17501:81:39","statements":[{"expression":{"id":5858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5851,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17519:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5852,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17524:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5853,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17528:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5855,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5856,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"17538:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5859,"nodeType":"ExpressionStatement","src":"17519:21:39"},{"expression":{"id":5862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5860,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17558:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5861,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5002,"src":"17565:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5863,"nodeType":"ExpressionStatement","src":"17558:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5866,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17600:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5867,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"17605:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5883,"nodeType":"IfStatement","src":"17596:94:39","trueBody":{"id":5882,"nodeType":"Block","src":"17609:81:39","statements":[{"expression":{"id":5876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5869,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17627:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5870,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17632:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5871,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17636:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5873,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5874,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5011,"src":"17646:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5877,"nodeType":"ExpressionStatement","src":"17627:21:39"},{"expression":{"id":5880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5878,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17666:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5879,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5008,"src":"17673:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5881,"nodeType":"ExpressionStatement","src":"17666:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5884,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17708:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5885,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5017,"src":"17713:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5901,"nodeType":"IfStatement","src":"17704:94:39","trueBody":{"id":5900,"nodeType":"Block","src":"17717:81:39","statements":[{"expression":{"id":5894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5887,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17735:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5888,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17740:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5889,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17744:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5891,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5892,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5017,"src":"17754:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5895,"nodeType":"ExpressionStatement","src":"17735:21:39"},{"expression":{"id":5898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5896,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17774:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5897,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5014,"src":"17781:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5899,"nodeType":"ExpressionStatement","src":"17774:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5902,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17816:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5903,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"17821:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5919,"nodeType":"IfStatement","src":"17812:94:39","trueBody":{"id":5918,"nodeType":"Block","src":"17825:81:39","statements":[{"expression":{"id":5912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5905,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17843:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5906,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17848:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5907,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17852:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5909,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5910,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"17862:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5913,"nodeType":"ExpressionStatement","src":"17843:21:39"},{"expression":{"id":5916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5914,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17882:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5915,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"17889:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5917,"nodeType":"ExpressionStatement","src":"17882:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5920,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17924:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5921,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5029,"src":"17929:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5937,"nodeType":"IfStatement","src":"17920:94:39","trueBody":{"id":5936,"nodeType":"Block","src":"17933:81:39","statements":[{"expression":{"id":5930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5923,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17951:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5924,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"17956:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5925,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"17960:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5927,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5928,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5029,"src":"17970:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5931,"nodeType":"ExpressionStatement","src":"17951:21:39"},{"expression":{"id":5934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5932,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"17990:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5933,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5026,"src":"17997:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5935,"nodeType":"ExpressionStatement","src":"17990:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5938,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18032:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5939,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"18037:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5955,"nodeType":"IfStatement","src":"18028:94:39","trueBody":{"id":5954,"nodeType":"Block","src":"18041:81:39","statements":[{"expression":{"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5941,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18059:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5942,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18064:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5943,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18068:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5945,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5946,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5035,"src":"18078:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5949,"nodeType":"ExpressionStatement","src":"18059:21:39"},{"expression":{"id":5952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5950,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"18098:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5951,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5032,"src":"18105:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5953,"nodeType":"ExpressionStatement","src":"18098:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5956,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18140:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5957,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5041,"src":"18145:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5973,"nodeType":"IfStatement","src":"18136:97:39","trueBody":{"id":5972,"nodeType":"Block","src":"18150:83:39","statements":[{"expression":{"id":5966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5959,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18168:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5960,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18173:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5961,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18177:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5963,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5964,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5041,"src":"18187:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5967,"nodeType":"ExpressionStatement","src":"18168:22:39"},{"expression":{"id":5970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5968,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"18208:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5969,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5038,"src":"18215:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5971,"nodeType":"ExpressionStatement","src":"18208:10:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5974,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18251:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5975,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5047,"src":"18256:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5991,"nodeType":"IfStatement","src":"18247:97:39","trueBody":{"id":5990,"nodeType":"Block","src":"18261:83:39","statements":[{"expression":{"id":5984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5977,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18279:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5978,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18284:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5979,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18288:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5981,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5982,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5047,"src":"18298:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5985,"nodeType":"ExpressionStatement","src":"18279:22:39"},{"expression":{"id":5988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5986,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"18319:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5987,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5044,"src":"18326:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5989,"nodeType":"ExpressionStatement","src":"18319:10:39"}]}}]},{"id":6119,"nodeType":"UncheckedBlock","src":"18856:1493:39","statements":[{"assignments":[5994],"declarations":[{"constant":false,"id":5994,"mutability":"mutable","name":"z","nameLocation":"18887:1:39","nodeType":"VariableDeclaration","scope":6119,"src":"18880:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5993,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6007,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5995,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18893:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5996,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18897:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5998,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5999,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18907:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6001,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6002,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5742,"src":"18918:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6003,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18922:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6005,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:39"},{"assignments":[6009],"declarations":[{"constant":false,"id":6009,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:39","nodeType":"VariableDeclaration","scope":6119,"src":"18943:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6008,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6016,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6010,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"18963:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6011,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"18967:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6013,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6014,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"18972:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:39"},{"assignments":[6018],"declarations":[{"constant":false,"id":6018,"mutability":"mutable","name":"num","nameLocation":"19074:3:39","nodeType":"VariableDeclaration","scope":6119,"src":"19067:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6017,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6020,"initialValue":{"id":6019,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"19080:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:39"},{"assignments":[6022],"declarations":[{"constant":false,"id":6022,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:39","nodeType":"VariableDeclaration","scope":6119,"src":"19203:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6021,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6024,"initialValue":{"id":6023,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19222:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:39"},{"expression":{"id":6032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6025,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19304:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6026,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19311:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6027,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"19317:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6030,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"19330:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6033,"nodeType":"ExpressionStatement","src":"19304:32:39"},{"expression":{"id":6038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6034,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"19350:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6035,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19363:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:39","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6039,"nodeType":"ExpressionStatement","src":"19350:20:39"},{"expression":{"id":6047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6040,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19385:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6041,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19392:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6042,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"19398:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6044,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6045,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"19411:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6048,"nodeType":"ExpressionStatement","src":"19385:32:39"},{"expression":{"id":6053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6049,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"19431:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6050,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19444:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:39","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6054,"nodeType":"ExpressionStatement","src":"19431:20:39"},{"expression":{"id":6062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6055,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19466:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6056,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19473:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6057,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"19479:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6059,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6060,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"19492:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6063,"nodeType":"ExpressionStatement","src":"19466:32:39"},{"expression":{"id":6068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6064,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"19512:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6065,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19525:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:39","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6069,"nodeType":"ExpressionStatement","src":"19512:20:39"},{"expression":{"id":6077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6070,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19547:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6071,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19554:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6072,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"19560:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6074,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6075,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"19573:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6078,"nodeType":"ExpressionStatement","src":"19547:32:39"},{"expression":{"id":6083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6079,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"19593:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6080,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19606:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:39","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6084,"nodeType":"ExpressionStatement","src":"19593:20:39"},{"expression":{"id":6092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6085,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19628:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6086,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19635:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6087,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"19641:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6089,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6090,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4945,"src":"19654:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6093,"nodeType":"ExpressionStatement","src":"19628:32:39"},{"expression":{"id":6098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6094,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"19674:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6095,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"19687:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:39","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6099,"nodeType":"ExpressionStatement","src":"19674:21:39"},{"expression":{"id":6102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6100,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"19866:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":6101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6103,"nodeType":"ExpressionStatement","src":"19866:14:39"},{"assignments":[6105],"declarations":[{"constant":false,"id":6105,"mutability":"mutable","name":"result","nameLocation":"20169:6:39","nodeType":"VariableDeclaration","scope":6119,"src":"20162:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6104,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6112,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6106,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"20179:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6107,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6022,"src":"20185:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6109,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":6110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:39"},{"expression":{"condition":{"id":6113,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5748,"src":"20303:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6116,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6105,"src":"20332:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:39","trueExpression":{"id":6115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:39","subExpression":{"id":6114,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6105,"src":"20323:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5746,"id":6118,"nodeType":"Return","src":"20296:42:39"}]}]},"documentation":{"id":5740,"nodeType":"StructuredDocumentation","src":"14678:88:39","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6121,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:39","nodeType":"FunctionDefinition","parameters":{"id":5743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5742,"mutability":"mutable","name":"a","nameLocation":"14791:1:39","nodeType":"VariableDeclaration","scope":6121,"src":"14784:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5741,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:39"},"returnParameters":{"id":5746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6121,"src":"14816:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5744,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:39"},"scope":6277,"src":"14771:5584:39","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":6275,"nodeType":"Block","src":"20678:1804:39","statements":[{"id":6274,"nodeType":"UncheckedBlock","src":"20892:1584:39","statements":[{"expression":{"id":6131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6129,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6124,"src":"20916:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":6130,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"20921:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6132,"nodeType":"ExpressionStatement","src":"20916:11:39"},{"assignments":[6134],"declarations":[{"constant":false,"id":6134,"mutability":"mutable","name":"z","nameLocation":"21315:1:39","nodeType":"VariableDeclaration","scope":6274,"src":"21308:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6133,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6147,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6135,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6124,"src":"21321:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6136,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21325:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6138,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6139,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21335:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6141,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6142,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6124,"src":"21346:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6143,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21350:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6145,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:39"},{"assignments":[6149],"declarations":[{"constant":false,"id":6149,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:39","nodeType":"VariableDeclaration","scope":6274,"src":"21371:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6148,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6156,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6150,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6134,"src":"21391:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6151,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6134,"src":"21395:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6153,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6154,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21400:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:39"},{"assignments":[6158],"declarations":[{"constant":false,"id":6158,"mutability":"mutable","name":"num","nameLocation":"21502:3:39","nodeType":"VariableDeclaration","scope":6274,"src":"21495:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6157,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6160,"initialValue":{"id":6159,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6134,"src":"21508:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:39"},{"assignments":[6162],"declarations":[{"constant":false,"id":6162,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:39","nodeType":"VariableDeclaration","scope":6274,"src":"21631:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6161,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6164,"initialValue":{"id":6163,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21650:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:39"},{"expression":{"id":6172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6165,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21732:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6166,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21739:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6167,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"21745:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6169,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6170,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21758:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6173,"nodeType":"ExpressionStatement","src":"21732:32:39"},{"expression":{"id":6178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6174,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"21778:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6175,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21791:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:39","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6179,"nodeType":"ExpressionStatement","src":"21778:20:39"},{"expression":{"id":6187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6180,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21813:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6181,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21820:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6182,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"21826:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6184,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6185,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21839:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6188,"nodeType":"ExpressionStatement","src":"21813:32:39"},{"expression":{"id":6193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6189,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"21859:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6190,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21872:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:39","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6194,"nodeType":"ExpressionStatement","src":"21859:20:39"},{"expression":{"id":6202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6195,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21894:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6196,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21901:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6197,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"21907:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6199,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6200,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"21920:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6203,"nodeType":"ExpressionStatement","src":"21894:32:39"},{"expression":{"id":6208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6204,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"21940:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6205,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21953:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:39","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6209,"nodeType":"ExpressionStatement","src":"21940:20:39"},{"expression":{"id":6217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6210,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21975:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6211,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"21982:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6212,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"21988:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6215,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"22001:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6218,"nodeType":"ExpressionStatement","src":"21975:32:39"},{"expression":{"id":6223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6219,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"22021:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6220,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22034:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:39","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6224,"nodeType":"ExpressionStatement","src":"22021:20:39"},{"expression":{"id":6232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6225,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22056:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6226,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22063:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6227,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"22069:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6229,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6230,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"22082:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6233,"nodeType":"ExpressionStatement","src":"22056:32:39"},{"expression":{"id":6238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6234,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"22102:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6235,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22115:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:39","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6239,"nodeType":"ExpressionStatement","src":"22102:21:39"},{"expression":{"id":6247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6240,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22138:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6241,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22145:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6242,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"22151:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6244,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6245,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"22164:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6248,"nodeType":"ExpressionStatement","src":"22138:32:39"},{"expression":{"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6249,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"22184:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6250,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22197:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":6251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:39","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6254,"nodeType":"ExpressionStatement","src":"22184:21:39"},{"expression":{"id":6262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6255,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22220:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6256,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22227:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6257,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6149,"src":"22233:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6259,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6260,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"22246:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6263,"nodeType":"ExpressionStatement","src":"22220:32:39"},{"expression":{"id":6268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6264,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"22266:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6265,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6158,"src":"22279:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":6266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:39","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6269,"nodeType":"ExpressionStatement","src":"22266:21:39"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6270,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6162,"src":"22452:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":6271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6128,"id":6273,"nodeType":"Return","src":"22445:20:39"}]}]},"documentation":{"id":6122,"nodeType":"StructuredDocumentation","src":"20361:256:39","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":6276,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:39","nodeType":"FunctionDefinition","parameters":{"id":6125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6124,"mutability":"mutable","name":"x","nameLocation":"20645:1:39","nodeType":"VariableDeclaration","scope":6276,"src":"20638:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6123,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:39"},"returnParameters":{"id":6128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6276,"src":"20670:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6126,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:39"},"scope":6277,"src":"20622:1860:39","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6278,"src":"595:21889:39","usedErrors":[4927,4930,4933,4936,4939],"usedEvents":[]}],"src":"33:22452:39"},"id":39},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[6346],"StorageSlotExtension":[6559]},"id":6347,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6279,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:40"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":6281,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6347,"sourceUnit":6560,"src":"59:66:40","symbolAliases":[{"foreign":{"id":6280,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6559,"src":"68:20:40","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":6282,"nodeType":"StructuredDocumentation","src":"127:155:40","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":6346,"linearizedBaseContracts":[6346],"name":"ReentrancyGuardTransient","nameLocation":"301:24:40","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6284,"libraryName":{"id":6283,"name":"StorageSlotExtension","nameLocations":["338:20:40"],"nodeType":"IdentifierPath","referencedDeclaration":6559,"src":"338:20:40"},"nodeType":"UsingForDirective","src":"332:33:40"},{"constant":true,"id":6287,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:40","nodeType":"VariableDeclaration","scope":6346,"src":"490:127:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6285,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":6286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:40","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":6288,"nodeType":"StructuredDocumentation","src":"624:40:40","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":6290,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:40","nodeType":"ErrorDefinition","parameters":{"id":6289,"nodeType":"ParameterList","parameters":[],"src":"703:2:40"},"src":"669:37:40"},{"body":{"id":6300,"nodeType":"Block","src":"1107:79:40","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6293,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6320,"src":"1117:19:40","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6295,"nodeType":"ExpressionStatement","src":"1117:21:40"},{"id":6296,"nodeType":"PlaceholderStatement","src":"1148:1:40"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6297,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6332,"src":"1159:18:40","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6299,"nodeType":"ExpressionStatement","src":"1159:20:40"}]},"documentation":{"id":6291,"nodeType":"StructuredDocumentation","src":"712:366:40","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":6301,"name":"nonReentrant","nameLocation":"1092:12:40","nodeType":"ModifierDefinition","parameters":{"id":6292,"nodeType":"ParameterList","parameters":[],"src":"1104:2:40"},"src":"1083:103:40","virtual":false,"visibility":"internal"},{"body":{"id":6319,"nodeType":"Block","src":"1231:310:40","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":6304,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6345,"src":"1320:23:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":6305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6310,"nodeType":"IfStatement","src":"1316:93:40","trueBody":{"id":6309,"nodeType":"Block","src":"1347:62:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6306,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6290,"src":"1368:28:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6308,"nodeType":"RevertStatement","src":"1361:37:40"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":6316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6311,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6287,"src":"1484:25:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:40","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6397,"src":"1484:35:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6382_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:40","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6492,"src":"1484:44:40","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6382_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6382_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6318,"nodeType":"ExpressionStatement","src":"1484:50:40"}]},"id":6320,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:40","nodeType":"FunctionDefinition","parameters":{"id":6302,"nodeType":"ParameterList","parameters":[],"src":"1220:2:40"},"returnParameters":{"id":6303,"nodeType":"ParameterList","parameters":[],"src":"1231:0:40"},"scope":6346,"src":"1192:349:40","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6331,"nodeType":"Block","src":"1585:68:40","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":6328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6323,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6287,"src":"1595:25:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:40","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6397,"src":"1595:35:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6382_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:40","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":6492,"src":"1595:44:40","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$6382_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6382_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6330,"nodeType":"ExpressionStatement","src":"1595:51:40"}]},"id":6332,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:40","nodeType":"FunctionDefinition","parameters":{"id":6321,"nodeType":"ParameterList","parameters":[],"src":"1574:2:40"},"returnParameters":{"id":6322,"nodeType":"ParameterList","parameters":[],"src":"1585:0:40"},"scope":6346,"src":"1547:106:40","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6344,"nodeType":"Block","src":"1896:69:40","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6338,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6287,"src":"1913:25:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:40","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":6397,"src":"1913:35:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6382_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:40","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":6481,"src":"1913:43:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$6382_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$6382_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":6342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6337,"id":6343,"nodeType":"Return","src":"1906:52:40"}]},"documentation":{"id":6333,"nodeType":"StructuredDocumentation","src":"1659:168:40","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":6345,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:40","nodeType":"FunctionDefinition","parameters":{"id":6334,"nodeType":"ParameterList","parameters":[],"src":"1864:2:40"},"returnParameters":{"id":6337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6336,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6345,"src":"1890:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6335,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:40"},"scope":6346,"src":"1832:133:40","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6347,"src":"283:1684:40","usedErrors":[6290],"usedEvents":[]}],"src":"33:1935:40"},"id":40},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[6559]},"id":6560,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6348,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:41"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":6349,"nodeType":"StructuredDocumentation","src":"59:218:41","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":6559,"linearizedBaseContracts":[6559],"name":"StorageSlotExtension","nameLocation":"286:20:41","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":6352,"members":[{"constant":false,"id":6351,"mutability":"mutable","name":"value","nameLocation":"348:5:41","nodeType":"VariableDeclaration","scope":6352,"src":"341:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6350,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:41","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:41","nodeType":"StructDefinition","scope":6559,"src":"313:47:41","visibility":"public"},{"body":{"id":6362,"nodeType":"Block","src":"524:106:41","statements":[{"AST":{"nativeSrc":"586:38:41","nodeType":"YulBlock","src":"586:38:41","statements":[{"nativeSrc":"600:14:41","nodeType":"YulAssignment","src":"600:14:41","value":{"name":"slot","nativeSrc":"610:4:41","nodeType":"YulIdentifier","src":"610:4:41"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:41","nodeType":"YulIdentifier","src":"600:6:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6359,"isOffset":false,"isSlot":true,"src":"600:6:41","suffix":"slot","valueSize":1},{"declaration":6355,"isOffset":false,"isSlot":false,"src":"610:4:41","valueSize":1}],"id":6361,"nodeType":"InlineAssembly","src":"577:47:41"}]},"documentation":{"id":6353,"nodeType":"StructuredDocumentation","src":"366:71:41","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":6363,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:41","nodeType":"FunctionDefinition","parameters":{"id":6356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6355,"mutability":"mutable","name":"slot","nameLocation":"473:4:41","nodeType":"VariableDeclaration","scope":6363,"src":"465:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6354,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:41"},"returnParameters":{"id":6360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6359,"mutability":"mutable","name":"r","nameLocation":"521:1:41","nodeType":"VariableDeclaration","scope":6363,"src":"502:20:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$6352_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":6358,"nodeType":"UserDefinedTypeName","pathNode":{"id":6357,"name":"Int256Slot","nameLocations":["502:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6352,"src":"502:10:41"},"referencedDeclaration":6352,"src":"502:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$6352_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:41"},"scope":6559,"src":"442:188:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":6365,"name":"AddressSlotType","nameLocation":"709:15:41","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:41","underlyingType":{"id":6364,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6379,"nodeType":"Block","src":"873:50:41","statements":[{"expression":{"arguments":[{"id":6376,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6368,"src":"911:4:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6374,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6365,"src":"890:15:41","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$6365_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":6375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:41","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:41","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$6365_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":6377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":6373,"id":6378,"nodeType":"Return","src":"883:33:41"}]},"documentation":{"id":6366,"nodeType":"StructuredDocumentation","src":"742:53:41","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":6380,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:41","nodeType":"FunctionDefinition","parameters":{"id":6369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6368,"mutability":"mutable","name":"slot","nameLocation":"827:4:41","nodeType":"VariableDeclaration","scope":6380,"src":"819:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6367,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:41"},"returnParameters":{"id":6373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6372,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6380,"src":"856:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":6371,"nodeType":"UserDefinedTypeName","pathNode":{"id":6370,"name":"AddressSlotType","nameLocations":["856:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6365,"src":"856:15:41"},"referencedDeclaration":6365,"src":"856:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:41"},"scope":6559,"src":"800:123:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":6382,"name":"BooleanSlotType","nameLocation":"1001:15:41","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:41","underlyingType":{"id":6381,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6396,"nodeType":"Block","src":"1165:50:41","statements":[{"expression":{"arguments":[{"id":6393,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6385,"src":"1203:4:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6391,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6382,"src":"1182:15:41","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$6382_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":6392,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:41","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:41","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$6382_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":6390,"id":6395,"nodeType":"Return","src":"1175:33:41"}]},"documentation":{"id":6383,"nodeType":"StructuredDocumentation","src":"1034:53:41","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":6397,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:41","nodeType":"FunctionDefinition","parameters":{"id":6386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6385,"mutability":"mutable","name":"slot","nameLocation":"1119:4:41","nodeType":"VariableDeclaration","scope":6397,"src":"1111:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6384,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:41"},"returnParameters":{"id":6390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6397,"src":"1148:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":6388,"nodeType":"UserDefinedTypeName","pathNode":{"id":6387,"name":"BooleanSlotType","nameLocations":["1148:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6382,"src":"1148:15:41"},"referencedDeclaration":6382,"src":"1148:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:41"},"scope":6559,"src":"1092:123:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":6399,"name":"Bytes32SlotType","nameLocation":"1293:15:41","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:41","underlyingType":{"id":6398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6413,"nodeType":"Block","src":"1457:50:41","statements":[{"expression":{"arguments":[{"id":6410,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6402,"src":"1495:4:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6408,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"1474:15:41","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$6399_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":6409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:41","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:41","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$6399_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":6411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":6407,"id":6412,"nodeType":"Return","src":"1467:33:41"}]},"documentation":{"id":6400,"nodeType":"StructuredDocumentation","src":"1326:53:41","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":6414,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:41","nodeType":"FunctionDefinition","parameters":{"id":6403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6402,"mutability":"mutable","name":"slot","nameLocation":"1411:4:41","nodeType":"VariableDeclaration","scope":6414,"src":"1403:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6401,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:41"},"returnParameters":{"id":6407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6414,"src":"1440:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":6405,"nodeType":"UserDefinedTypeName","pathNode":{"id":6404,"name":"Bytes32SlotType","nameLocations":["1440:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6399,"src":"1440:15:41"},"referencedDeclaration":6399,"src":"1440:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:41"},"scope":6559,"src":"1384:123:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":6416,"name":"Uint256SlotType","nameLocation":"1585:15:41","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:41","underlyingType":{"id":6415,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6430,"nodeType":"Block","src":"1749:50:41","statements":[{"expression":{"arguments":[{"id":6427,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6419,"src":"1787:4:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6425,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6416,"src":"1766:15:41","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$6416_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":6426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:41","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:41","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$6416_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":6428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":6424,"id":6429,"nodeType":"Return","src":"1759:33:41"}]},"documentation":{"id":6417,"nodeType":"StructuredDocumentation","src":"1618:53:41","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":6431,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:41","nodeType":"FunctionDefinition","parameters":{"id":6420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6419,"mutability":"mutable","name":"slot","nameLocation":"1703:4:41","nodeType":"VariableDeclaration","scope":6431,"src":"1695:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:41"},"returnParameters":{"id":6424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6423,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6431,"src":"1732:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":6422,"nodeType":"UserDefinedTypeName","pathNode":{"id":6421,"name":"Uint256SlotType","nameLocations":["1732:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6416,"src":"1732:15:41"},"referencedDeclaration":6416,"src":"1732:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:41"},"scope":6559,"src":"1676:123:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":6433,"name":"Int256SlotType","nameLocation":"1877:14:41","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:41","underlyingType":{"id":6432,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":6447,"nodeType":"Block","src":"2038:49:41","statements":[{"expression":{"arguments":[{"id":6444,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6436,"src":"2075:4:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6442,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6433,"src":"2055:14:41","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$6433_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":6443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:41","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:41","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$6433_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":6445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":6441,"id":6446,"nodeType":"Return","src":"2048:32:41"}]},"documentation":{"id":6434,"nodeType":"StructuredDocumentation","src":"1909:53:41","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":6448,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:41","nodeType":"FunctionDefinition","parameters":{"id":6437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6436,"mutability":"mutable","name":"slot","nameLocation":"1993:4:41","nodeType":"VariableDeclaration","scope":6448,"src":"1985:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6435,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:41"},"returnParameters":{"id":6441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6440,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6448,"src":"2022:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":6439,"nodeType":"UserDefinedTypeName","pathNode":{"id":6438,"name":"Int256SlotType","nameLocations":["2022:14:41"],"nodeType":"IdentifierPath","referencedDeclaration":6433,"src":"2022:14:41"},"referencedDeclaration":6433,"src":"2022:14:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:41"},"scope":6559,"src":"1967:120:41","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6458,"nodeType":"Block","src":"2242:112:41","statements":[{"AST":{"nativeSrc":"2304:44:41","nodeType":"YulBlock","src":"2304:44:41","statements":[{"nativeSrc":"2318:20:41","nodeType":"YulAssignment","src":"2318:20:41","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:41","nodeType":"YulIdentifier","src":"2333:4:41"}],"functionName":{"name":"tload","nativeSrc":"2327:5:41","nodeType":"YulIdentifier","src":"2327:5:41"},"nativeSrc":"2327:11:41","nodeType":"YulFunctionCall","src":"2327:11:41"},"variableNames":[{"name":"value","nativeSrc":"2318:5:41","nodeType":"YulIdentifier","src":"2318:5:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6452,"isOffset":false,"isSlot":false,"src":"2333:4:41","valueSize":1},{"declaration":6455,"isOffset":false,"isSlot":false,"src":"2318:5:41","valueSize":1}],"id":6457,"nodeType":"InlineAssembly","src":"2295:53:41"}]},"documentation":{"id":6449,"nodeType":"StructuredDocumentation","src":"2093:69:41","text":"@dev Load the value held at location `slot` in transient storage."},"id":6459,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:41","nodeType":"FunctionDefinition","parameters":{"id":6453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6452,"mutability":"mutable","name":"slot","nameLocation":"2198:4:41","nodeType":"VariableDeclaration","scope":6459,"src":"2182:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":6451,"nodeType":"UserDefinedTypeName","pathNode":{"id":6450,"name":"AddressSlotType","nameLocations":["2182:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6365,"src":"2182:15:41"},"referencedDeclaration":6365,"src":"2182:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:41"},"returnParameters":{"id":6456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6455,"mutability":"mutable","name":"value","nameLocation":"2235:5:41","nodeType":"VariableDeclaration","scope":6459,"src":"2227:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6454,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:41"},"scope":6559,"src":"2167:187:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6469,"nodeType":"Block","src":"2490:111:41","statements":[{"AST":{"nativeSrc":"2552:43:41","nodeType":"YulBlock","src":"2552:43:41","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:41","nodeType":"YulIdentifier","src":"2573:4:41"},{"name":"value","nativeSrc":"2579:5:41","nodeType":"YulIdentifier","src":"2579:5:41"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:41","nodeType":"YulIdentifier","src":"2566:6:41"},"nativeSrc":"2566:19:41","nodeType":"YulFunctionCall","src":"2566:19:41"},"nativeSrc":"2566:19:41","nodeType":"YulExpressionStatement","src":"2566:19:41"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6463,"isOffset":false,"isSlot":false,"src":"2573:4:41","valueSize":1},{"declaration":6465,"isOffset":false,"isSlot":false,"src":"2579:5:41","valueSize":1}],"id":6468,"nodeType":"InlineAssembly","src":"2543:52:41"}]},"documentation":{"id":6460,"nodeType":"StructuredDocumentation","src":"2360:63:41","text":"@dev Store `value` at location `slot` in transient storage."},"id":6470,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:41","nodeType":"FunctionDefinition","parameters":{"id":6466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6463,"mutability":"mutable","name":"slot","nameLocation":"2460:4:41","nodeType":"VariableDeclaration","scope":6470,"src":"2444:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":6462,"nodeType":"UserDefinedTypeName","pathNode":{"id":6461,"name":"AddressSlotType","nameLocations":["2444:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6365,"src":"2444:15:41"},"referencedDeclaration":6365,"src":"2444:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$6365","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":6465,"mutability":"mutable","name":"value","nameLocation":"2474:5:41","nodeType":"VariableDeclaration","scope":6470,"src":"2466:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6464,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:41"},"returnParameters":{"id":6467,"nodeType":"ParameterList","parameters":[],"src":"2490:0:41"},"scope":6559,"src":"2428:173:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6480,"nodeType":"Block","src":"2753:112:41","statements":[{"AST":{"nativeSrc":"2815:44:41","nodeType":"YulBlock","src":"2815:44:41","statements":[{"nativeSrc":"2829:20:41","nodeType":"YulAssignment","src":"2829:20:41","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:41","nodeType":"YulIdentifier","src":"2844:4:41"}],"functionName":{"name":"tload","nativeSrc":"2838:5:41","nodeType":"YulIdentifier","src":"2838:5:41"},"nativeSrc":"2838:11:41","nodeType":"YulFunctionCall","src":"2838:11:41"},"variableNames":[{"name":"value","nativeSrc":"2829:5:41","nodeType":"YulIdentifier","src":"2829:5:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6474,"isOffset":false,"isSlot":false,"src":"2844:4:41","valueSize":1},{"declaration":6477,"isOffset":false,"isSlot":false,"src":"2829:5:41","valueSize":1}],"id":6479,"nodeType":"InlineAssembly","src":"2806:53:41"}]},"documentation":{"id":6471,"nodeType":"StructuredDocumentation","src":"2607:69:41","text":"@dev Load the value held at location `slot` in transient storage."},"id":6481,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:41","nodeType":"FunctionDefinition","parameters":{"id":6475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6474,"mutability":"mutable","name":"slot","nameLocation":"2712:4:41","nodeType":"VariableDeclaration","scope":6481,"src":"2696:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":6473,"nodeType":"UserDefinedTypeName","pathNode":{"id":6472,"name":"BooleanSlotType","nameLocations":["2696:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6382,"src":"2696:15:41"},"referencedDeclaration":6382,"src":"2696:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:41"},"returnParameters":{"id":6478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6477,"mutability":"mutable","name":"value","nameLocation":"2746:5:41","nodeType":"VariableDeclaration","scope":6481,"src":"2741:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6476,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:41"},"scope":6559,"src":"2681:184:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6491,"nodeType":"Block","src":"2998:111:41","statements":[{"AST":{"nativeSrc":"3060:43:41","nodeType":"YulBlock","src":"3060:43:41","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:41","nodeType":"YulIdentifier","src":"3081:4:41"},{"name":"value","nativeSrc":"3087:5:41","nodeType":"YulIdentifier","src":"3087:5:41"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:41","nodeType":"YulIdentifier","src":"3074:6:41"},"nativeSrc":"3074:19:41","nodeType":"YulFunctionCall","src":"3074:19:41"},"nativeSrc":"3074:19:41","nodeType":"YulExpressionStatement","src":"3074:19:41"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6485,"isOffset":false,"isSlot":false,"src":"3081:4:41","valueSize":1},{"declaration":6487,"isOffset":false,"isSlot":false,"src":"3087:5:41","valueSize":1}],"id":6490,"nodeType":"InlineAssembly","src":"3051:52:41"}]},"documentation":{"id":6482,"nodeType":"StructuredDocumentation","src":"2871:63:41","text":"@dev Store `value` at location `slot` in transient storage."},"id":6492,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:41","nodeType":"FunctionDefinition","parameters":{"id":6488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6485,"mutability":"mutable","name":"slot","nameLocation":"2971:4:41","nodeType":"VariableDeclaration","scope":6492,"src":"2955:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":6484,"nodeType":"UserDefinedTypeName","pathNode":{"id":6483,"name":"BooleanSlotType","nameLocations":["2955:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6382,"src":"2955:15:41"},"referencedDeclaration":6382,"src":"2955:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$6382","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":6487,"mutability":"mutable","name":"value","nameLocation":"2982:5:41","nodeType":"VariableDeclaration","scope":6492,"src":"2977:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6486,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:41"},"returnParameters":{"id":6489,"nodeType":"ParameterList","parameters":[],"src":"2998:0:41"},"scope":6559,"src":"2939:170:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6502,"nodeType":"Block","src":"3264:112:41","statements":[{"AST":{"nativeSrc":"3326:44:41","nodeType":"YulBlock","src":"3326:44:41","statements":[{"nativeSrc":"3340:20:41","nodeType":"YulAssignment","src":"3340:20:41","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:41","nodeType":"YulIdentifier","src":"3355:4:41"}],"functionName":{"name":"tload","nativeSrc":"3349:5:41","nodeType":"YulIdentifier","src":"3349:5:41"},"nativeSrc":"3349:11:41","nodeType":"YulFunctionCall","src":"3349:11:41"},"variableNames":[{"name":"value","nativeSrc":"3340:5:41","nodeType":"YulIdentifier","src":"3340:5:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6496,"isOffset":false,"isSlot":false,"src":"3355:4:41","valueSize":1},{"declaration":6499,"isOffset":false,"isSlot":false,"src":"3340:5:41","valueSize":1}],"id":6501,"nodeType":"InlineAssembly","src":"3317:53:41"}]},"documentation":{"id":6493,"nodeType":"StructuredDocumentation","src":"3115:69:41","text":"@dev Load the value held at location `slot` in transient storage."},"id":6503,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:41","nodeType":"FunctionDefinition","parameters":{"id":6497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6496,"mutability":"mutable","name":"slot","nameLocation":"3220:4:41","nodeType":"VariableDeclaration","scope":6503,"src":"3204:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":6495,"nodeType":"UserDefinedTypeName","pathNode":{"id":6494,"name":"Bytes32SlotType","nameLocations":["3204:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6399,"src":"3204:15:41"},"referencedDeclaration":6399,"src":"3204:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:41"},"returnParameters":{"id":6500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6499,"mutability":"mutable","name":"value","nameLocation":"3257:5:41","nodeType":"VariableDeclaration","scope":6503,"src":"3249:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6498,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:41"},"scope":6559,"src":"3189:187:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6513,"nodeType":"Block","src":"3512:111:41","statements":[{"AST":{"nativeSrc":"3574:43:41","nodeType":"YulBlock","src":"3574:43:41","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:41","nodeType":"YulIdentifier","src":"3595:4:41"},{"name":"value","nativeSrc":"3601:5:41","nodeType":"YulIdentifier","src":"3601:5:41"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:41","nodeType":"YulIdentifier","src":"3588:6:41"},"nativeSrc":"3588:19:41","nodeType":"YulFunctionCall","src":"3588:19:41"},"nativeSrc":"3588:19:41","nodeType":"YulExpressionStatement","src":"3588:19:41"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6507,"isOffset":false,"isSlot":false,"src":"3595:4:41","valueSize":1},{"declaration":6509,"isOffset":false,"isSlot":false,"src":"3601:5:41","valueSize":1}],"id":6512,"nodeType":"InlineAssembly","src":"3565:52:41"}]},"documentation":{"id":6504,"nodeType":"StructuredDocumentation","src":"3382:63:41","text":"@dev Store `value` at location `slot` in transient storage."},"id":6514,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:41","nodeType":"FunctionDefinition","parameters":{"id":6510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6507,"mutability":"mutable","name":"slot","nameLocation":"3482:4:41","nodeType":"VariableDeclaration","scope":6514,"src":"3466:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":6506,"nodeType":"UserDefinedTypeName","pathNode":{"id":6505,"name":"Bytes32SlotType","nameLocations":["3466:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6399,"src":"3466:15:41"},"referencedDeclaration":6399,"src":"3466:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$6399","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":6509,"mutability":"mutable","name":"value","nameLocation":"3496:5:41","nodeType":"VariableDeclaration","scope":6514,"src":"3488:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6508,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:41"},"returnParameters":{"id":6511,"nodeType":"ParameterList","parameters":[],"src":"3512:0:41"},"scope":6559,"src":"3450:173:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6524,"nodeType":"Block","src":"3778:112:41","statements":[{"AST":{"nativeSrc":"3840:44:41","nodeType":"YulBlock","src":"3840:44:41","statements":[{"nativeSrc":"3854:20:41","nodeType":"YulAssignment","src":"3854:20:41","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:41","nodeType":"YulIdentifier","src":"3869:4:41"}],"functionName":{"name":"tload","nativeSrc":"3863:5:41","nodeType":"YulIdentifier","src":"3863:5:41"},"nativeSrc":"3863:11:41","nodeType":"YulFunctionCall","src":"3863:11:41"},"variableNames":[{"name":"value","nativeSrc":"3854:5:41","nodeType":"YulIdentifier","src":"3854:5:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6518,"isOffset":false,"isSlot":false,"src":"3869:4:41","valueSize":1},{"declaration":6521,"isOffset":false,"isSlot":false,"src":"3854:5:41","valueSize":1}],"id":6523,"nodeType":"InlineAssembly","src":"3831:53:41"}]},"documentation":{"id":6515,"nodeType":"StructuredDocumentation","src":"3629:69:41","text":"@dev Load the value held at location `slot` in transient storage."},"id":6525,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:41","nodeType":"FunctionDefinition","parameters":{"id":6519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6518,"mutability":"mutable","name":"slot","nameLocation":"3734:4:41","nodeType":"VariableDeclaration","scope":6525,"src":"3718:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":6517,"nodeType":"UserDefinedTypeName","pathNode":{"id":6516,"name":"Uint256SlotType","nameLocations":["3718:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6416,"src":"3718:15:41"},"referencedDeclaration":6416,"src":"3718:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:41"},"returnParameters":{"id":6522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6521,"mutability":"mutable","name":"value","nameLocation":"3771:5:41","nodeType":"VariableDeclaration","scope":6525,"src":"3763:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6520,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:41"},"scope":6559,"src":"3703:187:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6535,"nodeType":"Block","src":"4026:111:41","statements":[{"AST":{"nativeSrc":"4088:43:41","nodeType":"YulBlock","src":"4088:43:41","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:41","nodeType":"YulIdentifier","src":"4109:4:41"},{"name":"value","nativeSrc":"4115:5:41","nodeType":"YulIdentifier","src":"4115:5:41"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:41","nodeType":"YulIdentifier","src":"4102:6:41"},"nativeSrc":"4102:19:41","nodeType":"YulFunctionCall","src":"4102:19:41"},"nativeSrc":"4102:19:41","nodeType":"YulExpressionStatement","src":"4102:19:41"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6529,"isOffset":false,"isSlot":false,"src":"4109:4:41","valueSize":1},{"declaration":6531,"isOffset":false,"isSlot":false,"src":"4115:5:41","valueSize":1}],"id":6534,"nodeType":"InlineAssembly","src":"4079:52:41"}]},"documentation":{"id":6526,"nodeType":"StructuredDocumentation","src":"3896:63:41","text":"@dev Store `value` at location `slot` in transient storage."},"id":6536,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:41","nodeType":"FunctionDefinition","parameters":{"id":6532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6529,"mutability":"mutable","name":"slot","nameLocation":"3996:4:41","nodeType":"VariableDeclaration","scope":6536,"src":"3980:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":6528,"nodeType":"UserDefinedTypeName","pathNode":{"id":6527,"name":"Uint256SlotType","nameLocations":["3980:15:41"],"nodeType":"IdentifierPath","referencedDeclaration":6416,"src":"3980:15:41"},"referencedDeclaration":6416,"src":"3980:15:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$6416","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":6531,"mutability":"mutable","name":"value","nameLocation":"4010:5:41","nodeType":"VariableDeclaration","scope":6536,"src":"4002:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6530,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:41"},"returnParameters":{"id":6533,"nodeType":"ParameterList","parameters":[],"src":"4026:0:41"},"scope":6559,"src":"3964:173:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6546,"nodeType":"Block","src":"4290:112:41","statements":[{"AST":{"nativeSrc":"4352:44:41","nodeType":"YulBlock","src":"4352:44:41","statements":[{"nativeSrc":"4366:20:41","nodeType":"YulAssignment","src":"4366:20:41","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:41","nodeType":"YulIdentifier","src":"4381:4:41"}],"functionName":{"name":"tload","nativeSrc":"4375:5:41","nodeType":"YulIdentifier","src":"4375:5:41"},"nativeSrc":"4375:11:41","nodeType":"YulFunctionCall","src":"4375:11:41"},"variableNames":[{"name":"value","nativeSrc":"4366:5:41","nodeType":"YulIdentifier","src":"4366:5:41"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6540,"isOffset":false,"isSlot":false,"src":"4381:4:41","valueSize":1},{"declaration":6543,"isOffset":false,"isSlot":false,"src":"4366:5:41","valueSize":1}],"id":6545,"nodeType":"InlineAssembly","src":"4343:53:41"}]},"documentation":{"id":6537,"nodeType":"StructuredDocumentation","src":"4143:69:41","text":"@dev Load the value held at location `slot` in transient storage."},"id":6547,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:41","nodeType":"FunctionDefinition","parameters":{"id":6541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6540,"mutability":"mutable","name":"slot","nameLocation":"4247:4:41","nodeType":"VariableDeclaration","scope":6547,"src":"4232:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":6539,"nodeType":"UserDefinedTypeName","pathNode":{"id":6538,"name":"Int256SlotType","nameLocations":["4232:14:41"],"nodeType":"IdentifierPath","referencedDeclaration":6433,"src":"4232:14:41"},"referencedDeclaration":6433,"src":"4232:14:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:41"},"returnParameters":{"id":6544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6543,"mutability":"mutable","name":"value","nameLocation":"4283:5:41","nodeType":"VariableDeclaration","scope":6547,"src":"4276:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6542,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:41","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:41"},"scope":6559,"src":"4217:185:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6557,"nodeType":"Block","src":"4536:111:41","statements":[{"AST":{"nativeSrc":"4598:43:41","nodeType":"YulBlock","src":"4598:43:41","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:41","nodeType":"YulIdentifier","src":"4619:4:41"},{"name":"value","nativeSrc":"4625:5:41","nodeType":"YulIdentifier","src":"4625:5:41"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:41","nodeType":"YulIdentifier","src":"4612:6:41"},"nativeSrc":"4612:19:41","nodeType":"YulFunctionCall","src":"4612:19:41"},"nativeSrc":"4612:19:41","nodeType":"YulExpressionStatement","src":"4612:19:41"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":6551,"isOffset":false,"isSlot":false,"src":"4619:4:41","valueSize":1},{"declaration":6553,"isOffset":false,"isSlot":false,"src":"4625:5:41","valueSize":1}],"id":6556,"nodeType":"InlineAssembly","src":"4589:52:41"}]},"documentation":{"id":6548,"nodeType":"StructuredDocumentation","src":"4408:63:41","text":"@dev Store `value` at location `slot` in transient storage."},"id":6558,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:41","nodeType":"FunctionDefinition","parameters":{"id":6554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6551,"mutability":"mutable","name":"slot","nameLocation":"4507:4:41","nodeType":"VariableDeclaration","scope":6558,"src":"4492:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":6550,"nodeType":"UserDefinedTypeName","pathNode":{"id":6549,"name":"Int256SlotType","nameLocations":["4492:14:41"],"nodeType":"IdentifierPath","referencedDeclaration":6433,"src":"4492:14:41"},"referencedDeclaration":6433,"src":"4492:14:41","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$6433","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":6553,"mutability":"mutable","name":"value","nameLocation":"4520:5:41","nodeType":"VariableDeclaration","scope":6558,"src":"4513:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6552,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:41","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:41"},"returnParameters":{"id":6555,"nodeType":"ParameterList","parameters":[],"src":"4536:0:41"},"scope":6559,"src":"4476:171:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":6560,"src":"278:4371:41","usedErrors":[],"usedEvents":[]}],"src":"33:4617:41"},"id":41},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","exportedSymbols":{"ERC20":[9554],"ERC20TestToken":[6677]},"id":6678,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6561,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:42"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":6563,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6678,"sourceUnit":9555,"src":"72:70:42","symbolAliases":[{"foreign":{"id":6562,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"81:5:42","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6564,"name":"ERC20","nameLocations":["171:5:42"],"nodeType":"IdentifierPath","referencedDeclaration":9554,"src":"171:5:42"},"id":6565,"nodeType":"InheritanceSpecifier","src":"171:5:42"}],"canonicalName":"ERC20TestToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6677,"linearizedBaseContracts":[6677,9554,8944,9658,9632,10259],"name":"ERC20TestToken","nameLocation":"153:14:42","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6567,"mutability":"immutable","name":"_decimals","nameLocation":"207:9:42","nodeType":"VariableDeclaration","scope":6677,"src":"183:33:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6566,"name":"uint8","nodeType":"ElementaryTypeName","src":"183:5:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"documentation":{"id":6568,"nodeType":"StructuredDocumentation","src":"223:57:42","text":"@dev Simulate tokens that don't allow zero transfers."},"errorSelector":"10cadee3","id":6570,"name":"ZeroTransfer","nameLocation":"291:12:42","nodeType":"ErrorDefinition","parameters":{"id":6569,"nodeType":"ParameterList","parameters":[],"src":"303:2:42"},"src":"285:21:42"},{"body":{"id":6587,"nodeType":"Block","src":"403:38:42","statements":[{"expression":{"id":6585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6583,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6567,"src":"413:9:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6584,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6576,"src":"425:9:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"413:21:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":6586,"nodeType":"ExpressionStatement","src":"413:21:42"}]},"id":6588,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6579,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"389:4:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":6580,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"395:6:42","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":6581,"kind":"baseConstructorSpecifier","modifierName":{"id":6578,"name":"ERC20","nameLocations":["383:5:42"],"nodeType":"IdentifierPath","referencedDeclaration":9554,"src":"383:5:42"},"nodeType":"ModifierInvocation","src":"383:19:42"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6572,"mutability":"mutable","name":"name","nameLocation":"338:4:42","nodeType":"VariableDeclaration","scope":6588,"src":"324:18:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6571,"name":"string","nodeType":"ElementaryTypeName","src":"324:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6574,"mutability":"mutable","name":"symbol","nameLocation":"358:6:42","nodeType":"VariableDeclaration","scope":6588,"src":"344:20:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6573,"name":"string","nodeType":"ElementaryTypeName","src":"344:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6576,"mutability":"mutable","name":"decimals_","nameLocation":"372:9:42","nodeType":"VariableDeclaration","scope":6588,"src":"366:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6575,"name":"uint8","nodeType":"ElementaryTypeName","src":"366:5:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"323:59:42"},"returnParameters":{"id":6582,"nodeType":"ParameterList","parameters":[],"src":"403:0:42"},"scope":6677,"src":"312:129:42","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[9118],"body":{"id":6596,"nodeType":"Block","src":"504:33:42","statements":[{"expression":{"id":6594,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6567,"src":"521:9:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":6593,"id":6595,"nodeType":"Return","src":"514:16:42"}]},"functionSelector":"313ce567","id":6597,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"456:8:42","nodeType":"FunctionDefinition","overrides":{"id":6590,"nodeType":"OverrideSpecifier","overrides":[],"src":"479:8:42"},"parameters":{"id":6589,"nodeType":"ParameterList","parameters":[],"src":"464:2:42"},"returnParameters":{"id":6593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6592,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6597,"src":"497:5:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6591,"name":"uint8","nodeType":"ElementaryTypeName","src":"497:5:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"496:7:42"},"scope":6677,"src":"447:90:42","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6609,"nodeType":"Block","src":"601:41:42","statements":[{"expression":{"arguments":[{"id":6605,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"617:9:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6606,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6601,"src":"628:6:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6604,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9394,"src":"611:5:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"611:24:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6608,"nodeType":"ExpressionStatement","src":"611:24:42"}]},"functionSelector":"40c10f19","id":6610,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"552:4:42","nodeType":"FunctionDefinition","parameters":{"id":6602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6599,"mutability":"mutable","name":"recipient","nameLocation":"565:9:42","nodeType":"VariableDeclaration","scope":6610,"src":"557:17:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6598,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6601,"mutability":"mutable","name":"amount","nameLocation":"584:6:42","nodeType":"VariableDeclaration","scope":6610,"src":"576:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6600,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:35:42"},"returnParameters":{"id":6603,"nodeType":"ParameterList","parameters":[],"src":"601:0:42"},"scope":6677,"src":"543:99:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6622,"nodeType":"Block","src":"703:38:42","statements":[{"expression":{"arguments":[{"id":6618,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6612,"src":"719:6:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6619,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6614,"src":"727:6:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6617,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9427,"src":"713:5:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"713:21:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6621,"nodeType":"ExpressionStatement","src":"713:21:42"}]},"functionSelector":"9dc29fac","id":6623,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"657:4:42","nodeType":"FunctionDefinition","parameters":{"id":6615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6612,"mutability":"mutable","name":"sender","nameLocation":"670:6:42","nodeType":"VariableDeclaration","scope":6623,"src":"662:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6611,"name":"address","nodeType":"ElementaryTypeName","src":"662:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6614,"mutability":"mutable","name":"amount","nameLocation":"686:6:42","nodeType":"VariableDeclaration","scope":6623,"src":"678:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6613,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"661:32:42"},"returnParameters":{"id":6616,"nodeType":"ParameterList","parameters":[],"src":"703:0:42"},"scope":6677,"src":"648:93:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[9164],"body":{"id":6647,"nodeType":"Block","src":"823:121:42","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6633,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6627,"src":"837:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"846:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"837:10:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6640,"nodeType":"IfStatement","src":"833:62:42","trueBody":{"id":6639,"nodeType":"Block","src":"849:46:42","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6636,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6570,"src":"870:12:42","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"870:14:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6638,"nodeType":"RevertStatement","src":"863:21:42"}]}},{"expression":{"arguments":[{"id":6643,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6625,"src":"927:2:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6627,"src":"931:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6641,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"912:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$6677_$","typeString":"type(contract super ERC20TestToken)"}},"id":6642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"918:8:42","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":9164,"src":"912:14:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) returns (bool)"}},"id":6645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"912:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6632,"id":6646,"nodeType":"Return","src":"905:32:42"}]},"functionSelector":"a9059cbb","id":6648,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"756:8:42","nodeType":"FunctionDefinition","overrides":{"id":6629,"nodeType":"OverrideSpecifier","overrides":[],"src":"799:8:42"},"parameters":{"id":6628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6625,"mutability":"mutable","name":"to","nameLocation":"773:2:42","nodeType":"VariableDeclaration","scope":6648,"src":"765:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6624,"name":"address","nodeType":"ElementaryTypeName","src":"765:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6627,"mutability":"mutable","name":"value","nameLocation":"785:5:42","nodeType":"VariableDeclaration","scope":6648,"src":"777:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6626,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"764:27:42"},"returnParameters":{"id":6632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6631,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6648,"src":"817:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6630,"name":"bool","nodeType":"ElementaryTypeName","src":"817:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"816:6:42"},"scope":6677,"src":"747:197:42","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[9237],"body":{"id":6675,"nodeType":"Block","src":"1044:131:42","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6660,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"1058:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1067:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1058:10:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6667,"nodeType":"IfStatement","src":"1054:62:42","trueBody":{"id":6666,"nodeType":"Block","src":"1070:46:42","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6663,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6570,"src":"1091:12:42","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:14:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6665,"nodeType":"RevertStatement","src":"1084:21:42"}]}},{"expression":{"arguments":[{"id":6670,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6650,"src":"1152:4:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6671,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6652,"src":"1158:2:42","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6672,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"1162:5:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6668,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1133:5:42","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$6677_$","typeString":"type(contract super ERC20TestToken)"}},"id":6669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1139:12:42","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":9237,"src":"1133:18:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":6673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1133:35:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6659,"id":6674,"nodeType":"Return","src":"1126:42:42"}]},"functionSelector":"23b872dd","id":6676,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"959:12:42","nodeType":"FunctionDefinition","overrides":{"id":6656,"nodeType":"OverrideSpecifier","overrides":[],"src":"1020:8:42"},"parameters":{"id":6655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6650,"mutability":"mutable","name":"from","nameLocation":"980:4:42","nodeType":"VariableDeclaration","scope":6676,"src":"972:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6649,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6652,"mutability":"mutable","name":"to","nameLocation":"994:2:42","nodeType":"VariableDeclaration","scope":6676,"src":"986:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6651,"name":"address","nodeType":"ElementaryTypeName","src":"986:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6654,"mutability":"mutable","name":"value","nameLocation":"1006:5:42","nodeType":"VariableDeclaration","scope":6676,"src":"998:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6653,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:41:42"},"returnParameters":{"id":6659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6676,"src":"1038:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6657,"name":"bool","nodeType":"ElementaryTypeName","src":"1038:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1037:6:42"},"scope":6677,"src":"950:225:42","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":6678,"src":"144:1033:42","usedErrors":[6570,8914,8919,8924,8933,8938,8943],"usedEvents":[9566,9575]}],"src":"46:1132:42"},"id":42},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","exportedSymbols":{"Authentication":[4159],"CommonAuthentication":[6869],"IVault":[2319]},"id":6870,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6679,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:43"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6681,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6870,"sourceUnit":2320,"src":"72:81:43","symbolAliases":[{"foreign":{"id":6680,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"81:6:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":6683,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6870,"sourceUnit":4160,"src":"154:103:43","symbolAliases":[{"foreign":{"id":6682,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4159,"src":"163:14:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6685,"name":"Authentication","nameLocations":["390:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":4159,"src":"390:14:43"},"id":6686,"nodeType":"InheritanceSpecifier","src":"390:14:43"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":6684,"nodeType":"StructuredDocumentation","src":"259:89:43","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":6869,"linearizedBaseContracts":[6869,4159,81],"name":"CommonAuthentication","nameLocation":"366:20:43","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6687,"nodeType":"StructuredDocumentation","src":"411:36:43","text":"@dev Vault cannot be address(0)."},"errorSelector":"c8e28160","id":6689,"name":"VaultNotSet","nameLocation":"458:11:43","nodeType":"ErrorDefinition","parameters":{"id":6688,"nodeType":"ParameterList","parameters":[],"src":"469:2:43"},"src":"452:20:43"},{"constant":false,"id":6692,"mutability":"immutable","name":"_vault","nameLocation":"503:6:43","nodeType":"VariableDeclaration","scope":6869,"src":"478:31:43","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":6691,"nodeType":"UserDefinedTypeName","pathNode":{"id":6690,"name":"IVault","nameLocations":["478:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"478:6:43"},"referencedDeclaration":2319,"src":"478:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":6711,"nodeType":"Block","src":"667:161:43","statements":[{"assignments":[6698],"declarations":[{"constant":false,"id":6698,"mutability":"mutable","name":"roleAddress","nameLocation":"685:11:43","nodeType":"VariableDeclaration","scope":6711,"src":"677:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6697,"name":"address","nodeType":"ElementaryTypeName","src":"677:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6704,"initialValue":{"expression":{"arguments":[{"id":6701,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"726:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6699,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6692,"src":"699:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":6700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"706:19:43","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3550,"src":"699:26:43","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$3885_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":6702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"699:32:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":6703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"732:14:43","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":3882,"src":"699:47:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"677:69:43"},{"expression":{"arguments":[{"id":6706,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6695,"src":"792:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6707,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6698,"src":"798:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6705,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6837,"src":"756:35:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":6708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:54:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6709,"nodeType":"ExpressionStatement","src":"756:54:43"},{"id":6710,"nodeType":"PlaceholderStatement","src":"820:1:43"}]},"documentation":{"id":6693,"nodeType":"StructuredDocumentation","src":"516:92:43","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":6712,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"622:30:43","nodeType":"ModifierDefinition","parameters":{"id":6696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6695,"mutability":"mutable","name":"pool","nameLocation":"661:4:43","nodeType":"VariableDeclaration","scope":6712,"src":"653:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6694,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"652:14:43"},"src":"613:215:43","virtual":false,"visibility":"internal"},{"body":{"id":6741,"nodeType":"Block","src":"929:120:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6725,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6715,"src":"951:5:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}],"id":6724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"943:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6723,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:43","typeDescriptions":{}}},"id":6726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"943:14:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"961:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6727,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:43","typeDescriptions":{}}},"id":6730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"961:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"943:28:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6736,"nodeType":"IfStatement","src":"939:79:43","trueBody":{"id":6735,"nodeType":"Block","src":"973:45:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6732,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6689,"src":"994:11:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"994:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6734,"nodeType":"RevertStatement","src":"987:20:43"}]}},{"expression":{"id":6739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6737,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6692,"src":"1028:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6738,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6715,"src":"1037:5:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"src":"1028:14:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":6740,"nodeType":"ExpressionStatement","src":"1028:14:43"}]},"id":6742,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6720,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"906:21:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6721,"kind":"baseConstructorSpecifier","modifierName":{"id":6719,"name":"Authentication","nameLocations":["891:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":4159,"src":"891:14:43"},"nodeType":"ModifierInvocation","src":"891:37:43"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6715,"mutability":"mutable","name":"vault","nameLocation":"853:5:43","nodeType":"VariableDeclaration","scope":6742,"src":"846:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":6714,"nodeType":"UserDefinedTypeName","pathNode":{"id":6713,"name":"IVault","nameLocations":["846:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"846:6:43"},"referencedDeclaration":2319,"src":"846:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":6717,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"868:21:43","nodeType":"VariableDeclaration","scope":6742,"src":"860:29:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6716,"name":"bytes32","nodeType":"ElementaryTypeName","src":"860:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"845:45:43"},"returnParameters":{"id":6722,"nodeType":"ParameterList","parameters":[],"src":"929:0:43"},"scope":6869,"src":"834:215:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6750,"nodeType":"Block","src":"1107:30:43","statements":[{"expression":{"id":6748,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6692,"src":"1124:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"functionReturnParameters":6747,"id":6749,"nodeType":"Return","src":"1117:13:43"}]},"id":6751,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"1064:9:43","nodeType":"FunctionDefinition","parameters":{"id":6743,"nodeType":"ParameterList","parameters":[],"src":"1073:2:43"},"returnParameters":{"id":6747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6746,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6751,"src":"1099:6:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":6745,"nodeType":"UserDefinedTypeName","pathNode":{"id":6744,"name":"IVault","nameLocations":["1099:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1099:6:43"},"referencedDeclaration":2319,"src":"1099:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1098:8:43"},"scope":6869,"src":"1055:82:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[4158],"body":{"id":6773,"nodeType":"Block","src":"1319:88:43","statements":[{"expression":{"arguments":[{"id":6765,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6753,"src":"1370:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6766,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6755,"src":"1380:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6769,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1394:4:43","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$6869","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$6869","typeString":"contract CommonAuthentication"}],"id":6768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1386:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6767,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:43","typeDescriptions":{}}},"id":6770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6761,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6692,"src":"1336:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":6762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1343:13:43","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3633,"src":"1336:20:43","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1009_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:22:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"id":6764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1359:10:43","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1008,"src":"1336:33:43","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:64:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6760,"id":6772,"nodeType":"Return","src":"1329:71:43"}]},"id":6774,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1237:11:43","nodeType":"FunctionDefinition","overrides":{"id":6757,"nodeType":"OverrideSpecifier","overrides":[],"src":"1295:8:43"},"parameters":{"id":6756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6753,"mutability":"mutable","name":"actionId","nameLocation":"1257:8:43","nodeType":"VariableDeclaration","scope":6774,"src":"1249:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6752,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1249:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6755,"mutability":"mutable","name":"user","nameLocation":"1275:4:43","nodeType":"VariableDeclaration","scope":6774,"src":"1267:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6754,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1248:32:43"},"returnParameters":{"id":6760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6774,"src":"1313:4:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6758,"name":"bool","nodeType":"ElementaryTypeName","src":"1313:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1312:6:43"},"scope":6869,"src":"1228:179:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6794,"nodeType":"Block","src":"1513:83:43","statements":[{"expression":{"arguments":[{"id":6789,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6776,"src":"1564:8:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6790,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6778,"src":"1574:7:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6791,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6780,"src":"1583:5:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6785,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6692,"src":"1530:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":6786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1537:13:43","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3633,"src":"1530:20:43","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1009_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:22:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"id":6788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1553:10:43","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1008,"src":"1530:33:43","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:59:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6784,"id":6793,"nodeType":"Return","src":"1523:66:43"}]},"id":6795,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1422:11:43","nodeType":"FunctionDefinition","parameters":{"id":6781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6776,"mutability":"mutable","name":"actionId","nameLocation":"1442:8:43","nodeType":"VariableDeclaration","scope":6795,"src":"1434:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6775,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1434:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6778,"mutability":"mutable","name":"account","nameLocation":"1460:7:43","nodeType":"VariableDeclaration","scope":6795,"src":"1452:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6777,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6780,"mutability":"mutable","name":"where","nameLocation":"1477:5:43","nodeType":"VariableDeclaration","scope":6795,"src":"1469:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6779,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1433:50:43"},"returnParameters":{"id":6784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6783,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6795,"src":"1507:4:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6782,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:43"},"scope":6869,"src":"1413:183:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6836,"nodeType":"Block","src":"1803:339:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6803,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"1817:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1840:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6805,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1832:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6804,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:43","typeDescriptions":{}}},"id":6807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1832:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1817:25:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6826,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2059:3:43","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2063:6:43","memberName":"sender","nodeType":"MemberAccess","src":"2059:10:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6828,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"2073:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2059:25:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6834,"nodeType":"IfStatement","src":"2055:81:43","trueBody":{"id":6833,"nodeType":"Block","src":"2086:50:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6830,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"2107:16:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2107:18:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6832,"nodeType":"RevertStatement","src":"2100:25:43"}]}},"id":6835,"nodeType":"IfStatement","src":"1813:323:43","trueBody":{"id":6825,"nodeType":"Block","src":"1844:205:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":6811,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1942:3:43","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1946:3:43","memberName":"sig","nodeType":"MemberAccess","src":"1942:7:43","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":6810,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4148,"src":"1930:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":6813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1930:20:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":6814,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:43","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:43","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6816,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6798,"src":"1964:5:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6809,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[6774,6795],"referencedDeclaration":6795,"src":"1918:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":6817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1918:52:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":6818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1974:5:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1918:61:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6824,"nodeType":"IfStatement","src":"1914:125:43","trueBody":{"id":6823,"nodeType":"Block","src":"1981:58:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6820,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"2006:16:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2006:18:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6822,"nodeType":"RevertStatement","src":"1999:25:43"}]}}]}}]},"documentation":{"id":6796,"nodeType":"StructuredDocumentation","src":"1602:101:43","text":"@dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0)."},"id":6837,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1717:35:43","nodeType":"FunctionDefinition","parameters":{"id":6801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6798,"mutability":"mutable","name":"where","nameLocation":"1761:5:43","nodeType":"VariableDeclaration","scope":6837,"src":"1753:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6797,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6800,"mutability":"mutable","name":"roleAccount","nameLocation":"1776:11:43","nodeType":"VariableDeclaration","scope":6837,"src":"1768:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6799,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1752:36:43"},"returnParameters":{"id":6802,"nodeType":"ParameterList","parameters":[],"src":"1803:0:43"},"scope":6869,"src":"1708:434:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6867,"nodeType":"Block","src":"2341:352:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6845,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2444:3:43","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:6:43","memberName":"sender","nodeType":"MemberAccess","src":"2444:10:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6847,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6842,"src":"2458:11:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2444:25:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6866,"nodeType":"IfStatement","src":"2440:180:43","trueBody":{"id":6865,"nodeType":"Block","src":"2471:149:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":6851,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2513:3:43","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:3:43","memberName":"sig","nodeType":"MemberAccess","src":"2513:7:43","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":6850,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4148,"src":"2501:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":6853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:20:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":6854,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2523:3:43","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2527:6:43","memberName":"sender","nodeType":"MemberAccess","src":"2523:10:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6856,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6840,"src":"2535:5:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6849,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[6774,6795],"referencedDeclaration":6795,"src":"2489:11:43","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":6857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2489:52:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":6858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2545:5:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2489:61:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6864,"nodeType":"IfStatement","src":"2485:125:43","trueBody":{"id":6863,"nodeType":"Block","src":"2552:58:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6860,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"2577:16:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2577:18:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6862,"nodeType":"RevertStatement","src":"2570:25:43"}]}}]}}]},"documentation":{"id":6838,"nodeType":"StructuredDocumentation","src":"2148:102:43","text":"@dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive)."},"id":6868,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"2264:26:43","nodeType":"FunctionDefinition","parameters":{"id":6843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6840,"mutability":"mutable","name":"where","nameLocation":"2299:5:43","nodeType":"VariableDeclaration","scope":6868,"src":"2291:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6839,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6842,"mutability":"mutable","name":"roleAccount","nameLocation":"2314:11:43","nodeType":"VariableDeclaration","scope":6868,"src":"2306:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6841,"name":"address","nodeType":"ElementaryTypeName","src":"2306:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2290:36:43"},"returnParameters":{"id":6844,"nodeType":"ParameterList","parameters":[],"src":"2341:0:43"},"scope":6869,"src":"2255:438:43","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6870,"src":"348:2347:43","usedErrors":[72,6689],"usedEvents":[]}],"src":"46:2650:43"},"id":43},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[4076],"FixedPoint":[4921],"IERC20":[9632],"IProtocolFeeController":[1673],"IVault":[2319],"IVaultErrors":[2976],"MAX_FEE_PERCENTAGE":[4079],"PoolRoleAccounts":[3885],"ProtocolFeeController":[8564],"ReentrancyGuardTransient":[6346],"SafeCast":[12026],"SafeERC20":[9984],"SingletonAuthentication":[8623],"VaultGuard":[8672]},"id":8565,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6871,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:44"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":6873,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":9985,"src":"72:84:44","symbolAliases":[{"foreign":{"id":6872,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"81:9:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":6875,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":12027,"src":"157:75:44","symbolAliases":[{"foreign":{"id":6874,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"166:8:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":6877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":9633,"src":"233:72:44","symbolAliases":[{"foreign":{"id":6876,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"242:6:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":6879,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":1674,"src":"307:113:44","symbolAliases":[{"foreign":{"id":6878,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"316:22:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":6881,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":2977,"src":"421:93:44","symbolAliases":[{"foreign":{"id":6880,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"430:12:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6883,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":2320,"src":"515:81:44","symbolAliases":[{"foreign":{"id":6882,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"524:6:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":6887,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":4080,"src":"597:147:44","symbolAliases":[{"foreign":{"id":6884,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"610:18:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6885,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4079,"src":"634:18:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6886,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3885,"src":"658:16:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":6889,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":6347,"src":"746:132:44","symbolAliases":[{"foreign":{"id":6888,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"759:24:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":6891,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":4922,"src":"879:92:44","symbolAliases":[{"foreign":{"id":6890,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"888:10:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":6893,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":8624,"src":"973:72:44","symbolAliases":[{"foreign":{"id":6892,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"982:23:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":6895,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8565,"sourceUnit":8673,"src":"1046:46:44","symbolAliases":[{"foreign":{"id":6894,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8672,"src":"1055:10:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6897,"name":"IProtocolFeeController","nameLocations":["3158:22:44"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"3158:22:44"},"id":6898,"nodeType":"InheritanceSpecifier","src":"3158:22:44"},{"baseName":{"id":6899,"name":"SingletonAuthentication","nameLocations":["3186:23:44"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"3186:23:44"},"id":6900,"nodeType":"InheritanceSpecifier","src":"3186:23:44"},{"baseName":{"id":6901,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:44"],"nodeType":"IdentifierPath","referencedDeclaration":6346,"src":"3215:24:44"},"id":6902,"nodeType":"InheritanceSpecifier","src":"3215:24:44"},{"baseName":{"id":6903,"name":"VaultGuard","nameLocations":["3245:10:44"],"nodeType":"IdentifierPath","referencedDeclaration":8672,"src":"3245:10:44"},"id":6904,"nodeType":"InheritanceSpecifier","src":"3245:10:44"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":6896,"nodeType":"StructuredDocumentation","src":"1094:2025:44","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":8564,"linearizedBaseContracts":[8564,8672,6346,8623,6869,4159,81,1673],"name":"ProtocolFeeController","nameLocation":"3129:21:44","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6907,"libraryName":{"id":6905,"name":"FixedPoint","nameLocations":["3268:10:44"],"nodeType":"IdentifierPath","referencedDeclaration":4921,"src":"3268:10:44"},"nodeType":"UsingForDirective","src":"3262:29:44","typeName":{"id":6906,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":6911,"libraryName":{"id":6908,"name":"SafeERC20","nameLocations":["3302:9:44"],"nodeType":"IdentifierPath","referencedDeclaration":9984,"src":"3302:9:44"},"nodeType":"UsingForDirective","src":"3296:27:44","typeName":{"id":6910,"nodeType":"UserDefinedTypeName","pathNode":{"id":6909,"name":"IERC20","nameLocations":["3316:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3316:6:44"},"referencedDeclaration":9632,"src":"3316:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}},{"global":false,"id":6913,"libraryName":{"id":6912,"name":"SafeCast","nameLocations":["3334:8:44"],"nodeType":"IdentifierPath","referencedDeclaration":12026,"src":"3334:8:44"},"nodeType":"UsingForDirective","src":"3328:21:44"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":6916,"members":[{"id":6914,"name":"SWAP","nameLocation":"3386:4:44","nodeType":"EnumValue","src":"3386:4:44"},{"id":6915,"name":"YIELD","nameLocation":"3400:5:44","nodeType":"EnumValue","src":"3400:5:44"}],"name":"ProtocolFeeType","nameLocation":"3360:15:44","nodeType":"EnumDefinition","src":"3355:56:44"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":6917,"nodeType":"StructuredDocumentation","src":"3417:1063:44","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":6922,"members":[{"constant":false,"id":6919,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:44","nodeType":"VariableDeclaration","scope":6922,"src":"4516:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":6918,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":6921,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:44","nodeType":"VariableDeclaration","scope":6922,"src":"4546:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6920,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:44","nodeType":"StructDefinition","scope":8564,"src":"4485:83:44","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":6925,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:44","nodeType":"VariableDeclaration","scope":8564,"src":"4661:64:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6923,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":6924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:44","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":6928,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:44","nodeType":"VariableDeclaration","scope":8564,"src":"4785:65:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6926,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":6927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:44","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":6931,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:44","nodeType":"VariableDeclaration","scope":8564,"src":"4922:62:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6929,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":6930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:44","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":6933,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:44","nodeType":"VariableDeclaration","scope":8564,"src":"5035:48:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6932,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":6935,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:44","nodeType":"VariableDeclaration","scope":8564,"src":"5124:49:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6934,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":6940,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:44","nodeType":"VariableDeclaration","scope":8564,"src":"5294:93:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":6939,"keyName":"pool","keyNameLocation":"5310:4:44","keyType":{"id":6936,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:44","valueType":{"id":6938,"nodeType":"UserDefinedTypeName","pathNode":{"id":6937,"name":"PoolFeeConfig","nameLocations":["5318:13:44"],"nodeType":"IdentifierPath","referencedDeclaration":6922,"src":"5318:13:44"},"referencedDeclaration":6922,"src":"5318:13:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":6945,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:44","nodeType":"VariableDeclaration","scope":8564,"src":"5509:95:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":6944,"keyName":"pool","keyNameLocation":"5525:4:44","keyType":{"id":6941,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:44","valueType":{"id":6943,"nodeType":"UserDefinedTypeName","pathNode":{"id":6942,"name":"PoolFeeConfig","nameLocations":["5533:13:44"],"nodeType":"IdentifierPath","referencedDeclaration":6922,"src":"5533:13:44"},"referencedDeclaration":6922,"src":"5533:13:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":6949,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:44","nodeType":"VariableDeclaration","scope":8564,"src":"5725:68:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":6948,"keyName":"pool","keyNameLocation":"5741:4:44","keyType":{"id":6946,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:44","valueType":{"id":6947,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":6953,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:44","nodeType":"VariableDeclaration","scope":8564,"src":"5856:91:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":6952,"keyName":"pool","keyNameLocation":"5872:4:44","keyType":{"id":6950,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:44","valueType":{"id":6951,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":6957,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:44","nodeType":"VariableDeclaration","scope":8564,"src":"6011:93:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":6956,"keyName":"pool","keyNameLocation":"6027:4:44","keyType":{"id":6954,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:44","valueType":{"id":6955,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":6964,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:44","nodeType":"VariableDeclaration","scope":8564,"src":"6209:100:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":6963,"keyName":"pool","keyNameLocation":"6225:4:44","keyType":{"id":6958,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":6962,"keyName":"poolToken","keyNameLocation":"6248:9:44","keyType":{"id":6960,"nodeType":"UserDefinedTypeName","pathNode":{"id":6959,"name":"IERC20","nameLocations":["6241:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"6241:6:44"},"referencedDeclaration":9632,"src":"6241:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:44","valueType":{"id":6961,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":6971,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:44","nodeType":"VariableDeclaration","scope":8564,"src":"6424:103:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":6970,"keyName":"pool","keyNameLocation":"6440:4:44","keyType":{"id":6965,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":6969,"keyName":"poolToken","keyNameLocation":"6463:9:44","keyType":{"id":6967,"nodeType":"UserDefinedTypeName","pathNode":{"id":6966,"name":"IERC20","nameLocations":["6456:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"6456:6:44"},"referencedDeclaration":9632,"src":"6456:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:44","valueType":{"id":6968,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":6972,"nodeType":"StructuredDocumentation","src":"6534:279:44","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":6976,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:44","nodeType":"ErrorDefinition","parameters":{"id":6975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6974,"mutability":"mutable","name":"pool","nameLocation":"6854:4:44","nodeType":"VariableDeclaration","scope":6976,"src":"6846:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6973,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:44"},"src":"6818:42:44"},{"documentation":{"id":6977,"nodeType":"StructuredDocumentation","src":"6866:53:44","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":6979,"name":"InvalidMigrationSource","nameLocation":"6930:22:44","nodeType":"ErrorDefinition","parameters":{"id":6978,"nodeType":"ParameterList","parameters":[],"src":"6952:2:44"},"src":"6924:31:44"},{"body":{"id":6988,"nodeType":"Block","src":"7051:60:44","statements":[{"expression":{"arguments":[{"id":6984,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6981,"src":"7088:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6983,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7785,"src":"7061:26:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":6985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6986,"nodeType":"ExpressionStatement","src":"7061:32:44"},{"id":6987,"nodeType":"PlaceholderStatement","src":"7103:1:44"}]},"id":6989,"name":"onlyPoolCreator","nameLocation":"7021:15:44","nodeType":"ModifierDefinition","parameters":{"id":6982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6981,"mutability":"mutable","name":"pool","nameLocation":"7045:4:44","nodeType":"VariableDeclaration","scope":6989,"src":"7037:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6980,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:44"},"src":"7012:99:44","virtual":false,"visibility":"internal"},{"body":{"id":7006,"nodeType":"Block","src":"7234:207:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6993,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6991,"src":"7248:20:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6994,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"7271:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7000,"nodeType":"IfStatement","src":"7244:127:44","trueBody":{"id":6999,"nodeType":"Block","src":"7305:66:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6996,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1454,"src":"7326:32:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6998,"nodeType":"RevertStatement","src":"7319:41:44"}]}},{"expression":{"arguments":[{"id":7002,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6991,"src":"7402:20:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7001,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8563,"src":"7380:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7004,"nodeType":"ExpressionStatement","src":"7380:43:44"},{"id":7005,"nodeType":"PlaceholderStatement","src":"7433:1:44"}]},"id":7007,"name":"withValidSwapFee","nameLocation":"7187:16:44","nodeType":"ModifierDefinition","parameters":{"id":6992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6991,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:44","nodeType":"VariableDeclaration","scope":7007,"src":"7204:28:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6990,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:44"},"src":"7178:263:44","virtual":false,"visibility":"internal"},{"body":{"id":7024,"nodeType":"Block","src":"7567:211:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7011,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7009,"src":"7581:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7012,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6928,"src":"7605:33:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7018,"nodeType":"IfStatement","src":"7577:130:44","trueBody":{"id":7017,"nodeType":"Block","src":"7640:67:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7014,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1457,"src":"7661:33:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7016,"nodeType":"RevertStatement","src":"7654:42:44"}]}},{"expression":{"arguments":[{"id":7020,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7009,"src":"7738:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7019,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8563,"src":"7716:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7022,"nodeType":"ExpressionStatement","src":"7716:44:44"},{"id":7023,"nodeType":"PlaceholderStatement","src":"7770:1:44"}]},"id":7025,"name":"withValidYieldFee","nameLocation":"7518:17:44","nodeType":"ModifierDefinition","parameters":{"id":7010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7009,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:44","nodeType":"VariableDeclaration","scope":7025,"src":"7536:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7008,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:44"},"src":"7509:269:44","virtual":false,"visibility":"internal"},{"body":{"id":7038,"nodeType":"Block","src":"7854:154:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7029,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7027,"src":"7868:27:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7030,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6931,"src":"7898:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7036,"nodeType":"IfStatement","src":"7864:127:44","trueBody":{"id":7035,"nodeType":"Block","src":"7926:65:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7032,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"7947:31:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7034,"nodeType":"RevertStatement","src":"7940:40:44"}]}},{"id":7037,"nodeType":"PlaceholderStatement","src":"8000:1:44"}]},"id":7039,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:44","nodeType":"ModifierDefinition","parameters":{"id":7028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7027,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:44","nodeType":"VariableDeclaration","scope":7039,"src":"7817:35:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7026,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:44"},"src":"7784:224:44","virtual":false,"visibility":"internal"},{"body":{"id":7048,"nodeType":"Block","src":"8145:54:44","statements":[{"expression":{"arguments":[{"id":7044,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7041,"src":"8176:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7043,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7102,"src":"8155:20:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":7045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7046,"nodeType":"ExpressionStatement","src":"8155:26:44"},{"id":7047,"nodeType":"PlaceholderStatement","src":"8191:1:44"}]},"id":7049,"name":"withLatestFees","nameLocation":"8116:14:44","nodeType":"ModifierDefinition","parameters":{"id":7042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7041,"mutability":"mutable","name":"pool","nameLocation":"8139:4:44","nodeType":"VariableDeclaration","scope":7049,"src":"8131:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7040,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:44"},"src":"8107:92:44","virtual":false,"visibility":"internal"},{"body":{"id":7073,"nodeType":"Block","src":"8394:163:44","statements":[{"expression":{"arguments":[{"id":7066,"name":"initialGlobalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7054,"src":"8440:30:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7065,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8054,"src":"8404:35:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:67:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7068,"nodeType":"ExpressionStatement","src":"8404:67:44"},{"expression":{"arguments":[{"id":7070,"name":"initialGlobalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7056,"src":"8518:31:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7069,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8084,"src":"8481:36:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8481:69:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7072,"nodeType":"ExpressionStatement","src":"8481:69:44"}]},"id":7074,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7059,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7052,"src":"8367:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":7060,"kind":"baseConstructorSpecifier","modifierName":{"id":7058,"name":"SingletonAuthentication","nameLocations":["8343:23:44"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"8343:23:44"},"nodeType":"ModifierInvocation","src":"8343:31:44"},{"arguments":[{"id":7062,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7052,"src":"8386:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":7063,"kind":"baseConstructorSpecifier","modifierName":{"id":7061,"name":"VaultGuard","nameLocations":["8375:10:44"],"nodeType":"IdentifierPath","referencedDeclaration":8672,"src":"8375:10:44"},"nodeType":"ModifierInvocation","src":"8375:18:44"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7052,"mutability":"mutable","name":"vault_","nameLocation":"8233:6:44","nodeType":"VariableDeclaration","scope":7074,"src":"8226:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":7051,"nodeType":"UserDefinedTypeName","pathNode":{"id":7050,"name":"IVault","nameLocations":["8226:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"8226:6:44"},"referencedDeclaration":2319,"src":"8226:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7054,"mutability":"mutable","name":"initialGlobalSwapFeePercentage","nameLocation":"8257:30:44","nodeType":"VariableDeclaration","scope":7074,"src":"8249:38:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7053,"name":"uint256","nodeType":"ElementaryTypeName","src":"8249:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7056,"mutability":"mutable","name":"initialGlobalYieldFeePercentage","nameLocation":"8305:31:44","nodeType":"VariableDeclaration","scope":7074,"src":"8297:39:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7055,"name":"uint256","nodeType":"ElementaryTypeName","src":"8297:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8216:126:44"},"returnParameters":{"id":7064,"nodeType":"ParameterList","parameters":[],"src":"8394:0:44"},"scope":8564,"src":"8205:352:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1479],"body":{"id":7083,"nodeType":"Block","src":"8654:30:44","statements":[{"expression":{"id":7081,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"8671:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"functionReturnParameters":7080,"id":7082,"nodeType":"Return","src":"8664:13:44"}]},"documentation":{"id":7075,"nodeType":"StructuredDocumentation","src":"8563:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":7084,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8615:5:44","nodeType":"FunctionDefinition","parameters":{"id":7076,"nodeType":"ParameterList","parameters":[],"src":"8620:2:44"},"returnParameters":{"id":7080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7079,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7084,"src":"8646:6:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":7078,"nodeType":"UserDefinedTypeName","pathNode":{"id":7077,"name":"IVault","nameLocations":["8646:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"8646:6:44"},"referencedDeclaration":2319,"src":"8646:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8645:8:44"},"scope":8564,"src":"8606:78:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1485],"body":{"id":7101,"nodeType":"Block","src":"8784:100:44","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":7095,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8564,"src":"8823:21:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$8564_$","typeString":"type(contract ProtocolFeeController)"}},"id":7096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8845:24:44","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":7130,"src":"8823:46:44","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":7097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7087,"src":"8871:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7093,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8808:3:44","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7094,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8812:10:44","memberName":"encodeCall","nodeType":"MemberAccess","src":"8808:14:44","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8808:68:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7090,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"8794:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8801:6:44","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3648,"src":"8794:13:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":7099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8794:83:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7100,"nodeType":"ExpressionStatement","src":"8794:83:44"}]},"documentation":{"id":7085,"nodeType":"StructuredDocumentation","src":"8690:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":7102,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8742:20:44","nodeType":"FunctionDefinition","parameters":{"id":7088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7087,"mutability":"mutable","name":"pool","nameLocation":"8771:4:44","nodeType":"VariableDeclaration","scope":7102,"src":"8763:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7086,"name":"address","nodeType":"ElementaryTypeName","src":"8763:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8762:14:44"},"returnParameters":{"id":7089,"nodeType":"ParameterList","parameters":[],"src":"8784:0:44"},"scope":8564,"src":"8733:151:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7129,"nodeType":"Block","src":"9267:186:44","statements":[{"assignments":[7114,7117],"declarations":[{"constant":false,"id":7114,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9295:13:44","nodeType":"VariableDeclaration","scope":7129,"src":"9278:30:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7112,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7113,"nodeType":"ArrayTypeName","src":"9278:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7117,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9327:14:44","nodeType":"VariableDeclaration","scope":7129,"src":"9310:31:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7115,"name":"uint256","nodeType":"ElementaryTypeName","src":"9310:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7116,"nodeType":"ArrayTypeName","src":"9310:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":7122,"initialValue":{"arguments":[{"id":7120,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7105,"src":"9373:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7118,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"9345:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":7119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9352:20:44","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":2447,"src":"9345:27:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":7121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9345:33:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9277:101:44"},{"expression":{"arguments":[{"id":7124,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7105,"src":"9410:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7125,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7114,"src":"9416:13:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":7126,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7117,"src":"9431:14:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7123,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7157,7361],"referencedDeclaration":7157,"src":"9388:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":7127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9388:58:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7128,"nodeType":"ExpressionStatement","src":"9388:58:44"}]},"documentation":{"id":7103,"nodeType":"StructuredDocumentation","src":"8890:305:44","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":7130,"implemented":true,"kind":"function","modifiers":[{"id":7108,"kind":"modifierInvocation","modifierName":{"id":7107,"name":"onlyVault","nameLocations":["9257:9:44"],"nodeType":"IdentifierPath","referencedDeclaration":8651,"src":"9257:9:44"},"nodeType":"ModifierInvocation","src":"9257:9:44"}],"name":"collectAggregateFeesHook","nameLocation":"9209:24:44","nodeType":"FunctionDefinition","parameters":{"id":7106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7105,"mutability":"mutable","name":"pool","nameLocation":"9242:4:44","nodeType":"VariableDeclaration","scope":7130,"src":"9234:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7104,"name":"address","nodeType":"ElementaryTypeName","src":"9234:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9233:14:44"},"returnParameters":{"id":7109,"nodeType":"ParameterList","parameters":[],"src":"9267:0:44"},"scope":8564,"src":"9200:253:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7156,"nodeType":"Block","src":"10544:159:44","statements":[{"expression":{"arguments":[{"id":7143,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7133,"src":"10576:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7144,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"10582:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7145,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10598:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"10582:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7146,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7136,"src":"10604:14:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7142,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7157,7361],"referencedDeclaration":7361,"src":"10554:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$6916_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10554:65:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7148,"nodeType":"ExpressionStatement","src":"10554:65:44"},{"expression":{"arguments":[{"id":7150,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7133,"src":"10651:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7151,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"10657:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10673:5:44","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":6915,"src":"10657:21:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7153,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7139,"src":"10680:15:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7149,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7157,7361],"referencedDeclaration":7361,"src":"10629:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$6916_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10629:67:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7155,"nodeType":"ExpressionStatement","src":"10629:67:44"}]},"documentation":{"id":7131,"nodeType":"StructuredDocumentation","src":"9459:929:44","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":7157,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10402:21:44","nodeType":"FunctionDefinition","parameters":{"id":7140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7133,"mutability":"mutable","name":"pool","nameLocation":"10441:4:44","nodeType":"VariableDeclaration","scope":7157,"src":"10433:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7132,"name":"address","nodeType":"ElementaryTypeName","src":"10433:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7136,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10472:14:44","nodeType":"VariableDeclaration","scope":7157,"src":"10455:31:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7134,"name":"uint256","nodeType":"ElementaryTypeName","src":"10455:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7135,"nodeType":"ArrayTypeName","src":"10455:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7139,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10513:15:44","nodeType":"VariableDeclaration","scope":7157,"src":"10496:32:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7137,"name":"uint256","nodeType":"ElementaryTypeName","src":"10496:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7138,"nodeType":"ArrayTypeName","src":"10496:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10423:111:44"},"returnParameters":{"id":7141,"nodeType":"ParameterList","parameters":[],"src":"10544:0:44"},"scope":8564,"src":"10393:310:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7360,"nodeType":"Block","src":"10816:2992:44","statements":[{"assignments":[7169],"declarations":[{"constant":false,"id":7169,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11056:21:44","nodeType":"VariableDeclaration","scope":7360,"src":"11048:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7168,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7183,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7170,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7162,"src":"11080:7:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7171,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"11091:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"11091:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":7178,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"11192:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7180,"indexExpression":{"id":7179,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"11225:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11192:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11231:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"11192:52:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":7182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:164:44","trueExpression":{"expression":{"baseExpression":{"id":7174,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"11126:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7176,"indexExpression":{"id":7175,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"11158:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11164:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"11126:51:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"11048:196:44"},{"assignments":[7185],"declarations":[{"constant":false,"id":7185,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11263:24:44","nodeType":"VariableDeclaration","scope":7360,"src":"11255:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7184,"name":"uint256","nodeType":"ElementaryTypeName","src":"11255:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7197,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7186,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7162,"src":"11290:7:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7187,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"11301:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11317:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"11301:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11290:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":7193,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6957,"src":"11387:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7195,"indexExpression":{"id":7194,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"11419:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11387:37:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11290:134:44","trueExpression":{"baseExpression":{"id":7190,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"11336:30:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7192,"indexExpression":{"id":7191,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"11367:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11336:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11255:169:44"},{"assignments":[7199],"declarations":[{"constant":false,"id":7199,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11443:22:44","nodeType":"VariableDeclaration","scope":7360,"src":"11435:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7198,"name":"uint256","nodeType":"ElementaryTypeName","src":"11435:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7200,"nodeType":"VariableDeclarationStatement","src":"11435:30:44"},{"assignments":[7202],"declarations":[{"constant":false,"id":7202,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11481:15:44","nodeType":"VariableDeclaration","scope":7360,"src":"11476:20:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7201,"name":"bool","nodeType":"ElementaryTypeName","src":"11476:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":7210,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7203,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7185,"src":"11499:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11526:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11499:28:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7206,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7169,"src":"11531:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11555:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11531:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11499:57:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11476:80:44"},{"condition":{"id":7211,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"11570:15:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7220,"nodeType":"IfStatement","src":"11566:199:44","trueBody":{"id":7219,"nodeType":"Block","src":"11587:178:44","statements":[{"expression":{"id":7217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7212,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7199,"src":"11650:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7214,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7169,"src":"11706:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7215,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7185,"src":"11729:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7213,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7749,"src":"11675:30:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11675:79:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11650:104:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7218,"nodeType":"ExpressionStatement","src":"11650:104:44"}]}},{"assignments":[7225,7227],"declarations":[{"constant":false,"id":7225,"mutability":"mutable","name":"poolTokens","nameLocation":"11792:10:44","nodeType":"VariableDeclaration","scope":7360,"src":"11776:26:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7223,"nodeType":"UserDefinedTypeName","pathNode":{"id":7222,"name":"IERC20","nameLocations":["11776:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"11776:6:44"},"referencedDeclaration":9632,"src":"11776:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":7224,"nodeType":"ArrayTypeName","src":"11776:8:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7227,"mutability":"mutable","name":"numTokens","nameLocation":"11812:9:44","nodeType":"VariableDeclaration","scope":7360,"src":"11804:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7226,"name":"uint256","nodeType":"ElementaryTypeName","src":"11804:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7231,"initialValue":{"arguments":[{"id":7229,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"11848:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7228,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7809,"src":"11825:22:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":7230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11825:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11775:78:44"},{"body":{"id":7358,"nodeType":"Block","src":"11903:1899:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7242,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"11921:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7244,"indexExpression":{"id":7243,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"11932:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11921:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11937:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11921:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7357,"nodeType":"IfStatement","src":"11917:1875:44","trueBody":{"id":7356,"nodeType":"Block","src":"11940:1852:44","statements":[{"assignments":[7249],"declarations":[{"constant":false,"id":7249,"mutability":"mutable","name":"token","nameLocation":"11965:5:44","nodeType":"VariableDeclaration","scope":7356,"src":"11958:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":7248,"nodeType":"UserDefinedTypeName","pathNode":{"id":7247,"name":"IERC20","nameLocations":["11958:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"11958:6:44"},"referencedDeclaration":9632,"src":"11958:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":7253,"initialValue":{"baseExpression":{"id":7250,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7225,"src":"11973:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7252,"indexExpression":{"id":7251,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"11984:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11973:13:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11958:28:44"},{"expression":{"arguments":[{"id":7257,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"12019:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"arguments":[{"id":7260,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12034:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$8564","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$8564","typeString":"contract ProtocolFeeController"}],"id":7259,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12026:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7258,"name":"address","nodeType":"ElementaryTypeName","src":"12026:7:44","typeDescriptions":{}}},"id":7261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12026:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":7262,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"12041:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7264,"indexExpression":{"id":7263,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"12052:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12041:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7254,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"12005:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":7256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12012:6:44","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3670,"src":"12005:13:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":7265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12005:50:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7266,"nodeType":"ExpressionStatement","src":"12005:50:44"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7267,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7162,"src":"12234:7:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7268,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"12245:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12261:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"12245:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12234:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7288,"nodeType":"Block","src":"12371:99:44","statements":[{"eventCall":{"arguments":[{"id":7281,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"12424:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7282,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"12430:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"baseExpression":{"id":7283,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"12437:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7285,"indexExpression":{"id":7284,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"12448:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12437:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7280,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1400,"src":"12398:25:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12398:53:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7287,"nodeType":"EmitStatement","src":"12393:58:44"}]},"id":7289,"nodeType":"IfStatement","src":"12230:240:44","trueBody":{"id":7279,"nodeType":"Block","src":"12267:98:44","statements":[{"eventCall":{"arguments":[{"id":7272,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"12319:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7273,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"12325:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"baseExpression":{"id":7274,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"12332:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7276,"indexExpression":{"id":7275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"12343:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12332:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7271,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1390,"src":"12294:24:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12294:52:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7278,"nodeType":"EmitStatement","src":"12289:57:44"}]}},{"condition":{"id":7290,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"12492:15:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7354,"nodeType":"Block","src":"13422:356:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7328,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7185,"src":"13524:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13552:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13524:29:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7352,"nodeType":"Block","src":"13659:101:44","statements":[{"expression":{"id":7350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7342,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"13685:22:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7345,"indexExpression":{"id":7343,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"13708:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13685:28:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7346,"indexExpression":{"id":7344,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"13714:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13685:35:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":7347,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"13724:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7349,"indexExpression":{"id":7348,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"13735:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13724:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13685:52:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7351,"nodeType":"ExpressionStatement","src":"13685:52:44"}]},"id":7353,"nodeType":"IfStatement","src":"13520:240:44","trueBody":{"id":7341,"nodeType":"Block","src":"13555:98:44","statements":[{"expression":{"id":7339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7331,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"13581:19:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7334,"indexExpression":{"id":7332,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"13601:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13581:25:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7335,"indexExpression":{"id":7333,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"13607:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13581:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":7336,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"13617:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7338,"indexExpression":{"id":7337,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"13628:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13617:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13581:49:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7340,"nodeType":"ExpressionStatement","src":"13581:49:44"}]}}]},"id":7355,"nodeType":"IfStatement","src":"12488:1290:44","trueBody":{"id":7327,"nodeType":"Block","src":"12509:907:44","statements":[{"assignments":[7292],"declarations":[{"constant":false,"id":7292,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"13074:17:44","nodeType":"VariableDeclaration","scope":7327,"src":"13066:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7291,"name":"uint256","nodeType":"ElementaryTypeName","src":"13066:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7299,"initialValue":{"arguments":[{"id":7297,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7199,"src":"13114:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":7293,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"13094:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7295,"indexExpression":{"id":7294,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"13105:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13094:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:5:44","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"13094:19:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13094:43:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13066:71:44"},{"assignments":[7301],"declarations":[{"constant":false,"id":7301,"mutability":"mutable","name":"protocolPortion","nameLocation":"13167:15:44","nodeType":"VariableDeclaration","scope":7327,"src":"13159:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7300,"name":"uint256","nodeType":"ElementaryTypeName","src":"13159:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7306,"initialValue":{"arguments":[{"id":7304,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7169,"src":"13209:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7302,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7292,"src":"13185:17:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13203:5:44","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4683,"src":"13185:23:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13185:46:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13159:72:44"},{"expression":{"id":7313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7307,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"13254:19:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7310,"indexExpression":{"id":7308,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"13274:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13254:25:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7311,"indexExpression":{"id":7309,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"13280:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13254:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":7312,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7301,"src":"13290:15:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13254:51:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7314,"nodeType":"ExpressionStatement","src":"13254:51:44"},{"expression":{"id":7325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7315,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"13327:22:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7318,"indexExpression":{"id":7316,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7159,"src":"13350:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13327:28:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7319,"indexExpression":{"id":7317,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"13356:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13327:35:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7320,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"13366:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7322,"indexExpression":{"id":7321,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"13377:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13366:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7323,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7301,"src":"13382:15:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13366:31:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13327:70:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7326,"nodeType":"ExpressionStatement","src":"13327:70:44"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"11883:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7237,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7227,"src":"11887:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11883:13:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7359,"initializationExpression":{"assignments":[7233],"declarations":[{"constant":false,"id":7233,"mutability":"mutable","name":"i","nameLocation":"11876:1:44","nodeType":"VariableDeclaration","scope":7359,"src":"11868:9:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7232,"name":"uint256","nodeType":"ElementaryTypeName","src":"11868:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7235,"initialValue":{"hexValue":"30","id":7234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11880:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11868:13:44"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11898:3:44","subExpression":{"id":7239,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"11900:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7241,"nodeType":"ExpressionStatement","src":"11898:3:44"},"nodeType":"ForStatement","src":"11863:1939:44"}]},"id":7361,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10718:21:44","nodeType":"FunctionDefinition","parameters":{"id":7166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7159,"mutability":"mutable","name":"pool","nameLocation":"10748:4:44","nodeType":"VariableDeclaration","scope":7361,"src":"10740:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7158,"name":"address","nodeType":"ElementaryTypeName","src":"10740:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7162,"mutability":"mutable","name":"feeType","nameLocation":"10770:7:44","nodeType":"VariableDeclaration","scope":7361,"src":"10754:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":7161,"nodeType":"UserDefinedTypeName","pathNode":{"id":7160,"name":"ProtocolFeeType","nameLocations":["10754:15:44"],"nodeType":"IdentifierPath","referencedDeclaration":6916,"src":"10754:15:44"},"referencedDeclaration":6916,"src":"10754:15:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":7165,"mutability":"mutable","name":"feeAmounts","nameLocation":"10796:10:44","nodeType":"VariableDeclaration","scope":7361,"src":"10779:27:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7163,"name":"uint256","nodeType":"ElementaryTypeName","src":"10779:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7164,"nodeType":"ArrayTypeName","src":"10779:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10739:68:44"},"returnParameters":{"id":7167,"nodeType":"ParameterList","parameters":[],"src":"10816:0:44"},"scope":8564,"src":"10709:3099:44","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1491],"body":{"id":7369,"nodeType":"Block","src":"13935:56:44","statements":[{"expression":{"id":7367,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6933,"src":"13952:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7366,"id":7368,"nodeType":"Return","src":"13945:39:44"}]},"documentation":{"id":7362,"nodeType":"StructuredDocumentation","src":"13814:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":7370,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13866:34:44","nodeType":"FunctionDefinition","parameters":{"id":7363,"nodeType":"ParameterList","parameters":[],"src":"13900:2:44"},"returnParameters":{"id":7366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7365,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7370,"src":"13926:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7364,"name":"uint256","nodeType":"ElementaryTypeName","src":"13926:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13925:9:44"},"scope":8564,"src":"13857:134:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1497],"body":{"id":7378,"nodeType":"Block","src":"14119:57:44","statements":[{"expression":{"id":7376,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"14136:33:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7375,"id":7377,"nodeType":"Return","src":"14129:40:44"}]},"documentation":{"id":7371,"nodeType":"StructuredDocumentation","src":"13997:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":7379,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"14049:35:44","nodeType":"FunctionDefinition","parameters":{"id":7372,"nodeType":"ParameterList","parameters":[],"src":"14084:2:44"},"returnParameters":{"id":7375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7379,"src":"14110:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7373,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:9:44"},"scope":8564,"src":"14040:136:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1505],"body":{"id":7391,"nodeType":"Block","src":"14294:46:44","statements":[{"expression":{"baseExpression":{"id":7387,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6949,"src":"14311:16:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":7389,"indexExpression":{"id":7388,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"14328:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14311:22:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7386,"id":7390,"nodeType":"Return","src":"14304:29:44"}]},"documentation":{"id":7380,"nodeType":"StructuredDocumentation","src":"14182:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":7392,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14234:16:44","nodeType":"FunctionDefinition","parameters":{"id":7383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7382,"mutability":"mutable","name":"pool","nameLocation":"14259:4:44","nodeType":"VariableDeclaration","scope":7392,"src":"14251:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7381,"name":"address","nodeType":"ElementaryTypeName","src":"14251:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14250:14:44"},"returnParameters":{"id":7386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7392,"src":"14288:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7384,"name":"bool","nodeType":"ElementaryTypeName","src":"14288:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14287:6:44"},"scope":8564,"src":"14225:115:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1515],"body":{"id":7415,"nodeType":"Block","src":"14477:143:44","statements":[{"assignments":[7404],"declarations":[{"constant":false,"id":7404,"mutability":"mutable","name":"config","nameLocation":"14508:6:44","nodeType":"VariableDeclaration","scope":7415,"src":"14487:27:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":7403,"nodeType":"UserDefinedTypeName","pathNode":{"id":7402,"name":"PoolFeeConfig","nameLocations":["14487:13:44"],"nodeType":"IdentifierPath","referencedDeclaration":6922,"src":"14487:13:44"},"referencedDeclaration":6922,"src":"14487:13:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":7408,"initialValue":{"baseExpression":{"id":7405,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"14517:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7407,"indexExpression":{"id":7406,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7395,"src":"14549:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14517:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14487:67:44"},{"expression":{"components":[{"expression":{"id":7409,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7404,"src":"14573:6:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14580:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"14573:20:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":7411,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7404,"src":"14595:6:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14602:10:44","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":6921,"src":"14595:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7413,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14572:41:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":7401,"id":7414,"nodeType":"Return","src":"14565:48:44"}]},"documentation":{"id":7393,"nodeType":"StructuredDocumentation","src":"14346:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":7416,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14398:26:44","nodeType":"FunctionDefinition","parameters":{"id":7396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7395,"mutability":"mutable","name":"pool","nameLocation":"14433:4:44","nodeType":"VariableDeclaration","scope":7416,"src":"14425:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7394,"name":"address","nodeType":"ElementaryTypeName","src":"14425:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14424:14:44"},"returnParameters":{"id":7401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7416,"src":"14462:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7397,"name":"uint256","nodeType":"ElementaryTypeName","src":"14462:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7416,"src":"14471:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7399,"name":"bool","nodeType":"ElementaryTypeName","src":"14471:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14461:15:44"},"scope":8564,"src":"14389:231:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1525],"body":{"id":7439,"nodeType":"Block","src":"14758:144:44","statements":[{"assignments":[7428],"declarations":[{"constant":false,"id":7428,"mutability":"mutable","name":"config","nameLocation":"14789:6:44","nodeType":"VariableDeclaration","scope":7439,"src":"14768:27:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":7427,"nodeType":"UserDefinedTypeName","pathNode":{"id":7426,"name":"PoolFeeConfig","nameLocations":["14768:13:44"],"nodeType":"IdentifierPath","referencedDeclaration":6922,"src":"14768:13:44"},"referencedDeclaration":6922,"src":"14768:13:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":7432,"initialValue":{"baseExpression":{"id":7429,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"14798:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7431,"indexExpression":{"id":7430,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7419,"src":"14831:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14798:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14768:68:44"},{"expression":{"components":[{"expression":{"id":7433,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7428,"src":"14855:6:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7434,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14862:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"14855:20:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":7435,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7428,"src":"14877:6:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14884:10:44","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":6921,"src":"14877:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7437,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14854:41:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":7425,"id":7438,"nodeType":"Return","src":"14847:48:44"}]},"documentation":{"id":7417,"nodeType":"StructuredDocumentation","src":"14626:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":7440,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14678:27:44","nodeType":"FunctionDefinition","parameters":{"id":7420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7419,"mutability":"mutable","name":"pool","nameLocation":"14714:4:44","nodeType":"VariableDeclaration","scope":7440,"src":"14706:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7418,"name":"address","nodeType":"ElementaryTypeName","src":"14706:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14705:14:44"},"returnParameters":{"id":7425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7422,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7440,"src":"14743:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7421,"name":"uint256","nodeType":"ElementaryTypeName","src":"14743:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7424,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7440,"src":"14752:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7423,"name":"bool","nodeType":"ElementaryTypeName","src":"14752:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14742:15:44"},"scope":8564,"src":"14669:233:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1533],"body":{"id":7452,"nodeType":"Block","src":"15038:60:44","statements":[{"expression":{"baseExpression":{"id":7448,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"15055:30:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7450,"indexExpression":{"id":7449,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7443,"src":"15086:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15055:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7447,"id":7451,"nodeType":"Return","src":"15048:43:44"}]},"documentation":{"id":7441,"nodeType":"StructuredDocumentation","src":"14908:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":7453,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14960:31:44","nodeType":"FunctionDefinition","parameters":{"id":7444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7443,"mutability":"mutable","name":"pool","nameLocation":"15000:4:44","nodeType":"VariableDeclaration","scope":7453,"src":"14992:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7442,"name":"address","nodeType":"ElementaryTypeName","src":"14992:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14991:14:44"},"returnParameters":{"id":7447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7446,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7453,"src":"15029:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7445,"name":"uint256","nodeType":"ElementaryTypeName","src":"15029:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15028:9:44"},"scope":8564,"src":"14951:147:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1541],"body":{"id":7465,"nodeType":"Block","src":"15235:61:44","statements":[{"expression":{"baseExpression":{"id":7461,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6957,"src":"15252:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7463,"indexExpression":{"id":7462,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7456,"src":"15284:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15252:37:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7460,"id":7464,"nodeType":"Return","src":"15245:44:44"}]},"documentation":{"id":7454,"nodeType":"StructuredDocumentation","src":"15104:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":7466,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"15156:32:44","nodeType":"FunctionDefinition","parameters":{"id":7457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7456,"mutability":"mutable","name":"pool","nameLocation":"15197:4:44","nodeType":"VariableDeclaration","scope":7466,"src":"15189:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7455,"name":"address","nodeType":"ElementaryTypeName","src":"15189:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15188:14:44"},"returnParameters":{"id":7460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7466,"src":"15226:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7458,"name":"uint256","nodeType":"ElementaryTypeName","src":"15226:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15225:9:44"},"scope":8564,"src":"15147:149:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1550],"body":{"id":7518,"nodeType":"Block","src":"15442:273:44","statements":[{"assignments":[7479,7481],"declarations":[{"constant":false,"id":7479,"mutability":"mutable","name":"poolTokens","nameLocation":"15469:10:44","nodeType":"VariableDeclaration","scope":7518,"src":"15453:26:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7477,"nodeType":"UserDefinedTypeName","pathNode":{"id":7476,"name":"IERC20","nameLocations":["15453:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"15453:6:44"},"referencedDeclaration":9632,"src":"15453:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":7478,"nodeType":"ArrayTypeName","src":"15453:8:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7481,"mutability":"mutable","name":"numTokens","nameLocation":"15489:9:44","nodeType":"VariableDeclaration","scope":7518,"src":"15481:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7480,"name":"uint256","nodeType":"ElementaryTypeName","src":"15481:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7485,"initialValue":{"arguments":[{"id":7483,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7469,"src":"15525:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7482,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7809,"src":"15502:22:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":7484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15502:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15452:78:44"},{"expression":{"id":7492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7486,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7473,"src":"15541:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7490,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"15568:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15554:13:44","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":7487,"name":"uint256","nodeType":"ElementaryTypeName","src":"15558:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7488,"nodeType":"ArrayTypeName","src":"15558:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":7491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15554:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15541:37:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7493,"nodeType":"ExpressionStatement","src":"15541:37:44"},{"body":{"id":7516,"nodeType":"Block","src":"15628:81:44","statements":[{"expression":{"id":7514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7504,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7473,"src":"15642:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7506,"indexExpression":{"id":7505,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7495,"src":"15653:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15642:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":7507,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"15658:19:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7509,"indexExpression":{"id":7508,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7469,"src":"15678:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:25:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7513,"indexExpression":{"baseExpression":{"id":7510,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7479,"src":"15684:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7512,"indexExpression":{"id":7511,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7495,"src":"15695:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15684:13:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:40:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15642:56:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7515,"nodeType":"ExpressionStatement","src":"15642:56:44"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7498,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7495,"src":"15608:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7499,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"15612:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15608:13:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7517,"initializationExpression":{"assignments":[7495],"declarations":[{"constant":false,"id":7495,"mutability":"mutable","name":"i","nameLocation":"15601:1:44","nodeType":"VariableDeclaration","scope":7517,"src":"15593:9:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7494,"name":"uint256","nodeType":"ElementaryTypeName","src":"15593:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7497,"initialValue":{"hexValue":"30","id":7496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15605:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15593:13:44"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15623:3:44","subExpression":{"id":7501,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7495,"src":"15625:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7503,"nodeType":"ExpressionStatement","src":"15623:3:44"},"nodeType":"ForStatement","src":"15588:121:44"}]},"documentation":{"id":7467,"nodeType":"StructuredDocumentation","src":"15302:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":7519,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15354:21:44","nodeType":"FunctionDefinition","parameters":{"id":7470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7469,"mutability":"mutable","name":"pool","nameLocation":"15384:4:44","nodeType":"VariableDeclaration","scope":7519,"src":"15376:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7468,"name":"address","nodeType":"ElementaryTypeName","src":"15376:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15375:14:44"},"returnParameters":{"id":7474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7473,"mutability":"mutable","name":"feeAmounts","nameLocation":"15430:10:44","nodeType":"VariableDeclaration","scope":7519,"src":"15413:27:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7471,"name":"uint256","nodeType":"ElementaryTypeName","src":"15413:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7472,"nodeType":"ArrayTypeName","src":"15413:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15412:29:44"},"scope":8564,"src":"15345:370:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1559],"body":{"id":7571,"nodeType":"Block","src":"15864:276:44","statements":[{"assignments":[7532,7534],"declarations":[{"constant":false,"id":7532,"mutability":"mutable","name":"poolTokens","nameLocation":"15891:10:44","nodeType":"VariableDeclaration","scope":7571,"src":"15875:26:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7530,"nodeType":"UserDefinedTypeName","pathNode":{"id":7529,"name":"IERC20","nameLocations":["15875:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"15875:6:44"},"referencedDeclaration":9632,"src":"15875:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":7531,"nodeType":"ArrayTypeName","src":"15875:8:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7534,"mutability":"mutable","name":"numTokens","nameLocation":"15911:9:44","nodeType":"VariableDeclaration","scope":7571,"src":"15903:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7533,"name":"uint256","nodeType":"ElementaryTypeName","src":"15903:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7538,"initialValue":{"arguments":[{"id":7536,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7522,"src":"15947:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7535,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7809,"src":"15924:22:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":7537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15924:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15874:78:44"},{"expression":{"id":7545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7539,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7526,"src":"15963:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7543,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"15990:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15976:13:44","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":7540,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7541,"nodeType":"ArrayTypeName","src":"15980:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":7544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15976:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15963:37:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7546,"nodeType":"ExpressionStatement","src":"15963:37:44"},{"body":{"id":7569,"nodeType":"Block","src":"16050:84:44","statements":[{"expression":{"id":7567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7557,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7526,"src":"16064:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7559,"indexExpression":{"id":7558,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7548,"src":"16075:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16064:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":7560,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"16080:22:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7562,"indexExpression":{"id":7561,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7522,"src":"16103:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:28:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7566,"indexExpression":{"baseExpression":{"id":7563,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7532,"src":"16109:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7565,"indexExpression":{"id":7564,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7548,"src":"16120:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16109:13:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:43:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16064:59:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7568,"nodeType":"ExpressionStatement","src":"16064:59:44"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7551,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7548,"src":"16030:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7552,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"16034:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16030:13:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7570,"initializationExpression":{"assignments":[7548],"declarations":[{"constant":false,"id":7548,"mutability":"mutable","name":"i","nameLocation":"16023:1:44","nodeType":"VariableDeclaration","scope":7570,"src":"16015:9:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7547,"name":"uint256","nodeType":"ElementaryTypeName","src":"16015:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7550,"initialValue":{"hexValue":"30","id":7549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16027:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16015:13:44"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16045:3:44","subExpression":{"id":7554,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7548,"src":"16047:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7556,"nodeType":"ExpressionStatement","src":"16045:3:44"},"nodeType":"ForStatement","src":"16010:124:44"}]},"documentation":{"id":7520,"nodeType":"StructuredDocumentation","src":"15721:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":7572,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15773:24:44","nodeType":"FunctionDefinition","parameters":{"id":7523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7522,"mutability":"mutable","name":"pool","nameLocation":"15806:4:44","nodeType":"VariableDeclaration","scope":7572,"src":"15798:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7521,"name":"address","nodeType":"ElementaryTypeName","src":"15798:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15797:14:44"},"returnParameters":{"id":7527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7526,"mutability":"mutable","name":"feeAmounts","nameLocation":"15852:10:44","nodeType":"VariableDeclaration","scope":7572,"src":"15835:27:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7524,"name":"uint256","nodeType":"ElementaryTypeName","src":"15835:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7525,"nodeType":"ArrayTypeName","src":"15835:9:44","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15834:29:44"},"scope":8564,"src":"15764:376:44","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1569],"body":{"id":7587,"nodeType":"Block","src":"16347:103:44","statements":[{"expression":{"arguments":[{"id":7583,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7575,"src":"16395:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7584,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7577,"src":"16418:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7582,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7749,"src":"16364:30:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16364:79:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7581,"id":7586,"nodeType":"Return","src":"16357:86:44"}]},"documentation":{"id":7573,"nodeType":"StructuredDocumentation","src":"16146:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":7588,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"16198:29:44","nodeType":"FunctionDefinition","parameters":{"id":7578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7575,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16245:21:44","nodeType":"VariableDeclaration","scope":7588,"src":"16237:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7574,"name":"uint256","nodeType":"ElementaryTypeName","src":"16237:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7577,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16284:24:44","nodeType":"VariableDeclaration","scope":7588,"src":"16276:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7576,"name":"uint256","nodeType":"ElementaryTypeName","src":"16276:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16227:87:44"},"returnParameters":{"id":7581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7588,"src":"16338:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7579,"name":"uint256","nodeType":"ElementaryTypeName","src":"16338:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16337:9:44"},"scope":8564,"src":"16189:261:44","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1575],"body":{"id":7625,"nodeType":"Block","src":"16584:347:44","statements":[{"assignments":[7599],"declarations":[{"constant":false,"id":7599,"mutability":"mutable","name":"feeConfig","nameLocation":"16615:9:44","nodeType":"VariableDeclaration","scope":7625,"src":"16594:30:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":7598,"nodeType":"UserDefinedTypeName","pathNode":{"id":7597,"name":"PoolFeeConfig","nameLocations":["16594:13:44"],"nodeType":"IdentifierPath","referencedDeclaration":6922,"src":"16594:13:44"},"referencedDeclaration":6922,"src":"16594:13:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":7603,"initialValue":{"baseExpression":{"id":7600,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"16627:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7602,"indexExpression":{"id":7601,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7591,"src":"16659:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16627:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16594:70:44"},{"assignments":[7605],"declarations":[{"constant":false,"id":7605,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16682:21:44","nodeType":"VariableDeclaration","scope":7625,"src":"16674:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7604,"name":"uint256","nodeType":"ElementaryTypeName","src":"16674:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7607,"initialValue":{"id":7606,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6933,"src":"16706:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16674:64:44"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7608,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"16753:9:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16763:10:44","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":6921,"src":"16753:20:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16777:5:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16753:29:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7612,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"16786:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":7613,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"16811:9:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16821:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"16811:23:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16786:48:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16753:81:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7624,"nodeType":"IfStatement","src":"16749:176:44","trueBody":{"id":7623,"nodeType":"Block","src":"16836:89:44","statements":[{"expression":{"arguments":[{"id":7618,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7591,"src":"16879:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7619,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"16885:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":7620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16908:5:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7617,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"16850:28:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":7621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16850:64:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7622,"nodeType":"ExpressionStatement","src":"16850:64:44"}]}}]},"documentation":{"id":7589,"nodeType":"StructuredDocumentation","src":"16456:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":7626,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":7594,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7591,"src":"16578:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":7595,"kind":"modifierInvocation","modifierName":{"id":7593,"name":"withLatestFees","nameLocations":["16563:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"16563:14:44"},"nodeType":"ModifierInvocation","src":"16563:20:44"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16508:31:44","nodeType":"FunctionDefinition","parameters":{"id":7592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7591,"mutability":"mutable","name":"pool","nameLocation":"16548:4:44","nodeType":"VariableDeclaration","scope":7626,"src":"16540:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7590,"name":"address","nodeType":"ElementaryTypeName","src":"16540:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16539:14:44"},"returnParameters":{"id":7596,"nodeType":"ParameterList","parameters":[],"src":"16584:0:44"},"scope":8564,"src":"16499:432:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1581],"body":{"id":7663,"nodeType":"Block","src":"17066:353:44","statements":[{"assignments":[7637],"declarations":[{"constant":false,"id":7637,"mutability":"mutable","name":"feeConfig","nameLocation":"17097:9:44","nodeType":"VariableDeclaration","scope":7663,"src":"17076:30:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":7636,"nodeType":"UserDefinedTypeName","pathNode":{"id":7635,"name":"PoolFeeConfig","nameLocations":["17076:13:44"],"nodeType":"IdentifierPath","referencedDeclaration":6922,"src":"17076:13:44"},"referencedDeclaration":6922,"src":"17076:13:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":7641,"initialValue":{"baseExpression":{"id":7638,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"17109:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7640,"indexExpression":{"id":7639,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7629,"src":"17142:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17109:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17076:71:44"},{"assignments":[7643],"declarations":[{"constant":false,"id":7643,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"17165:22:44","nodeType":"VariableDeclaration","scope":7663,"src":"17157:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7642,"name":"uint256","nodeType":"ElementaryTypeName","src":"17157:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7645,"initialValue":{"id":7644,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"17190:33:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17157:66:44"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7646,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"17238:9:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17248:10:44","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":6921,"src":"17238:20:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17262:5:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17238:29:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7650,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7643,"src":"17271:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":7651,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"17297:9:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":7652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17307:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"17297:23:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17271:49:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17238:82:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7662,"nodeType":"IfStatement","src":"17234:179:44","trueBody":{"id":7661,"nodeType":"Block","src":"17322:91:44","statements":[{"expression":{"arguments":[{"id":7656,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7629,"src":"17366:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7657,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7643,"src":"17372:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":7658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17396:5:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7655,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8542,"src":"17336:29:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":7659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17336:66:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7660,"nodeType":"ExpressionStatement","src":"17336:66:44"}]}}]},"documentation":{"id":7627,"nodeType":"StructuredDocumentation","src":"16937:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":7664,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":7632,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7629,"src":"17060:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":7633,"kind":"modifierInvocation","modifierName":{"id":7631,"name":"withLatestFees","nameLocations":["17045:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"17045:14:44"},"nodeType":"ModifierInvocation","src":"17045:20:44"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16989:32:44","nodeType":"FunctionDefinition","parameters":{"id":7630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7629,"mutability":"mutable","name":"pool","nameLocation":"17030:4:44","nodeType":"VariableDeclaration","scope":7664,"src":"17022:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7628,"name":"address","nodeType":"ElementaryTypeName","src":"17022:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17021:14:44"},"returnParameters":{"id":7634,"nodeType":"ParameterList","parameters":[],"src":"17066:0:44"},"scope":8564,"src":"16980:439:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7718,"nodeType":"Block","src":"17532:594:44","statements":[{"assignments":[7675],"declarations":[{"constant":false,"id":7675,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17550:21:44","nodeType":"VariableDeclaration","scope":7718,"src":"17542:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7674,"name":"uint256","nodeType":"ElementaryTypeName","src":"17542:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7676,"nodeType":"VariableDeclarationStatement","src":"17542:29:44"},{"assignments":[7678],"declarations":[{"constant":false,"id":7678,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17589:24:44","nodeType":"VariableDeclaration","scope":7718,"src":"17581:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7677,"name":"uint256","nodeType":"ElementaryTypeName","src":"17581:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7679,"nodeType":"VariableDeclarationStatement","src":"17581:32:44"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7680,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7669,"src":"17628:7:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7681,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"17639:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17655:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"17639:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17628:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7711,"nodeType":"Block","src":"17844:179:44","statements":[{"expression":{"id":7703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7698,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"17858:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":7699,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"17882:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7701,"indexExpression":{"id":7700,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"17915:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17882:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7702,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17921:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"17882:52:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17858:76:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7704,"nodeType":"ExpressionStatement","src":"17858:76:44"},{"expression":{"id":7709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7705,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7678,"src":"17948:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":7706,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6957,"src":"17975:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7708,"indexExpression":{"id":7707,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"18007:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17975:37:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17948:64:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7710,"nodeType":"ExpressionStatement","src":"17948:64:44"}]},"id":7712,"nodeType":"IfStatement","src":"17624:399:44","trueBody":{"id":7697,"nodeType":"Block","src":"17661:177:44","statements":[{"expression":{"id":7689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7684,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"17675:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":7685,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"17699:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7687,"indexExpression":{"id":7686,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"17731:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17699:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17737:13:44","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":6919,"src":"17699:51:44","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17675:75:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7690,"nodeType":"ExpressionStatement","src":"17675:75:44"},{"expression":{"id":7695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7691,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7678,"src":"17764:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":7692,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"17791:30:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7694,"indexExpression":{"id":7693,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"17822:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17791:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17764:63:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7696,"nodeType":"ExpressionStatement","src":"17764:63:44"}]}},{"expression":{"arguments":[{"id":7714,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"18071:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7715,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7678,"src":"18094:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7713,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7749,"src":"18040:30:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18040:79:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7673,"id":7717,"nodeType":"Return","src":"18033:86:44"}]},"id":7719,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17434:26:44","nodeType":"FunctionDefinition","parameters":{"id":7670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7666,"mutability":"mutable","name":"pool","nameLocation":"17469:4:44","nodeType":"VariableDeclaration","scope":7719,"src":"17461:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7665,"name":"address","nodeType":"ElementaryTypeName","src":"17461:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7669,"mutability":"mutable","name":"feeType","nameLocation":"17491:7:44","nodeType":"VariableDeclaration","scope":7719,"src":"17475:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":7668,"nodeType":"UserDefinedTypeName","pathNode":{"id":7667,"name":"ProtocolFeeType","nameLocations":["17475:15:44"],"nodeType":"IdentifierPath","referencedDeclaration":6916,"src":"17475:15:44"},"referencedDeclaration":6916,"src":"17475:15:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17460:39:44"},"returnParameters":{"id":7673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7719,"src":"17523:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7671,"name":"uint256","nodeType":"ElementaryTypeName","src":"17523:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17522:9:44"},"scope":8564,"src":"17425:701:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7748,"nodeType":"Block","src":"18314:882:44","statements":[{"expression":{"id":7737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7728,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7726,"src":"18324:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7729,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7721,"src":"18361:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":7734,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7723,"src":"18440:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7730,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7721,"src":"18397:21:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18419:10:44","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":4920,"src":"18397:32:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":7732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:34:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18432:7:44","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4666,"src":"18397:42:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:68:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18361:104:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18324:141:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7738,"nodeType":"ExpressionStatement","src":"18324:141:44"},{"expression":{"id":7746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7739,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7726,"src":"19098:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7740,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7726,"src":"19124:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":7741,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"19149:18:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19124:43:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7743,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19123:45:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7744,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"19171:18:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19123:66:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19098:91:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7747,"nodeType":"ExpressionStatement","src":"19098:91:44"}]},"id":7749,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"18141:30:44","nodeType":"FunctionDefinition","parameters":{"id":7724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7721,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"18189:21:44","nodeType":"VariableDeclaration","scope":7749,"src":"18181:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7720,"name":"uint256","nodeType":"ElementaryTypeName","src":"18181:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7723,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18228:24:44","nodeType":"VariableDeclaration","scope":7749,"src":"18220:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7722,"name":"uint256","nodeType":"ElementaryTypeName","src":"18220:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18171:87:44"},"returnParameters":{"id":7727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7726,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18290:22:44","nodeType":"VariableDeclaration","scope":7749,"src":"18282:30:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7725,"name":"uint256","nodeType":"ElementaryTypeName","src":"18282:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18281:32:44"},"scope":8564,"src":"18132:1064:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7784,"nodeType":"Block","src":"19266:276:44","statements":[{"assignments":[7755],"declarations":[{"constant":false,"id":7755,"mutability":"mutable","name":"poolCreator","nameLocation":"19284:11:44","nodeType":"VariableDeclaration","scope":7784,"src":"19276:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7754,"name":"address","nodeType":"ElementaryTypeName","src":"19276:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":7759,"initialValue":{"arguments":[{"id":7757,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7751,"src":"19314:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7756,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"19298:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":7758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19298:21:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19276:43:44"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7760,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7755,"src":"19334:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19357:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19349:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7761,"name":"address","nodeType":"ElementaryTypeName","src":"19349:7:44","typeDescriptions":{}}},"id":7764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19349:10:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19334:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7771,"nodeType":"IfStatement","src":"19330:93:44","trueBody":{"id":7770,"nodeType":"Block","src":"19361:62:44","statements":[{"errorCall":{"arguments":[{"id":7767,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7751,"src":"19407:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7766,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1462,"src":"19382:24:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19382:30:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7769,"nodeType":"RevertStatement","src":"19375:37:44"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7772,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7755,"src":"19437:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":7773,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19452:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19456:6:44","memberName":"sender","nodeType":"MemberAccess","src":"19452:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19437:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7783,"nodeType":"IfStatement","src":"19433:103:44","trueBody":{"id":7782,"nodeType":"Block","src":"19464:72:44","statements":[{"errorCall":{"arguments":[{"expression":{"id":7777,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19508:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19512:6:44","memberName":"sender","nodeType":"MemberAccess","src":"19508:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7779,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7751,"src":"19520:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7776,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1469,"src":"19485:22:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":7780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19485:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7781,"nodeType":"RevertStatement","src":"19478:47:44"}]}}]},"id":7785,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19211:26:44","nodeType":"FunctionDefinition","parameters":{"id":7752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7751,"mutability":"mutable","name":"pool","nameLocation":"19246:4:44","nodeType":"VariableDeclaration","scope":7785,"src":"19238:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7750,"name":"address","nodeType":"ElementaryTypeName","src":"19238:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19237:14:44"},"returnParameters":{"id":7753,"nodeType":"ParameterList","parameters":[],"src":"19266:0:44"},"scope":8564,"src":"19202:340:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7808,"nodeType":"Block","src":"19660:87:44","statements":[{"expression":{"id":7801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7796,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"19670:6:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7799,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7787,"src":"19700:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7797,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"19679:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":7798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19686:13:44","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3353,"src":"19679:20:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":7800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19679:26:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19670:35:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7802,"nodeType":"ExpressionStatement","src":"19670:35:44"},{"expression":{"id":7806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7803,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7794,"src":"19715:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":7804,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"19727:6:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19734:6:44","memberName":"length","nodeType":"MemberAccess","src":"19727:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19715:25:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7807,"nodeType":"ExpressionStatement","src":"19715:25:44"}]},"id":7809,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19557:22:44","nodeType":"FunctionDefinition","parameters":{"id":7788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7787,"mutability":"mutable","name":"pool","nameLocation":"19588:4:44","nodeType":"VariableDeclaration","scope":7809,"src":"19580:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7786,"name":"address","nodeType":"ElementaryTypeName","src":"19580:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19579:14:44"},"returnParameters":{"id":7795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7792,"mutability":"mutable","name":"tokens","nameLocation":"19633:6:44","nodeType":"VariableDeclaration","scope":7809,"src":"19617:22:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7790,"nodeType":"UserDefinedTypeName","pathNode":{"id":7789,"name":"IERC20","nameLocations":["19617:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"19617:6:44"},"referencedDeclaration":9632,"src":"19617:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":7791,"nodeType":"ArrayTypeName","src":"19617:8:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7794,"mutability":"mutable","name":"numTokens","nameLocation":"19649:9:44","nodeType":"VariableDeclaration","scope":7809,"src":"19641:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7793,"name":"uint256","nodeType":"ElementaryTypeName","src":"19641:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19616:43:44"},"scope":8564,"src":"19548:199:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7827,"nodeType":"Block","src":"19884:130:44","statements":[{"assignments":[7818],"declarations":[{"constant":false,"id":7818,"mutability":"mutable","name":"roleAccounts","nameLocation":"19918:12:44","nodeType":"VariableDeclaration","scope":7827,"src":"19894:36:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":7817,"nodeType":"UserDefinedTypeName","pathNode":{"id":7816,"name":"PoolRoleAccounts","nameLocations":["19894:16:44"],"nodeType":"IdentifierPath","referencedDeclaration":3885,"src":"19894:16:44"},"referencedDeclaration":3885,"src":"19894:16:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":7823,"initialValue":{"arguments":[{"id":7821,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7811,"src":"19960:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7819,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"19933:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":7820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19940:19:44","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3550,"src":"19933:26:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$3885_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":7822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19933:32:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19894:71:44"},{"expression":{"expression":{"id":7824,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7818,"src":"19983:12:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":7825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19996:11:44","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":3884,"src":"19983:24:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7815,"id":7826,"nodeType":"Return","src":"19976:31:44"}]},"id":7828,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19822:15:44","nodeType":"FunctionDefinition","parameters":{"id":7812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7811,"mutability":"mutable","name":"pool","nameLocation":"19846:4:44","nodeType":"VariableDeclaration","scope":7828,"src":"19838:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7810,"name":"address","nodeType":"ElementaryTypeName","src":"19838:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19837:14:44"},"returnParameters":{"id":7815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7828,"src":"19875:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7813,"name":"address","nodeType":"ElementaryTypeName","src":"19875:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19874:9:44"},"scope":8564,"src":"19813:201:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7946,"nodeType":"Block","src":"21225:2076:44","statements":[{"assignments":[7836],"declarations":[{"constant":false,"id":7836,"mutability":"mutable","name":"oldFeeController","nameLocation":"21258:16:44","nodeType":"VariableDeclaration","scope":7946,"src":"21235:39:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":7835,"nodeType":"UserDefinedTypeName","pathNode":{"id":7834,"name":"IProtocolFeeController","nameLocations":["21235:22:44"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"21235:22:44"},"referencedDeclaration":1673,"src":"21235:22:44","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":7840,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7837,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"21277:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":7838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21284:24:44","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3568,"src":"21277:31:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":7839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:33:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21235:75:44"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7843,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7836,"src":"21333:16:44","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}],"id":7842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21325:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7841,"name":"address","nodeType":"ElementaryTypeName","src":"21325:7:44","typeDescriptions":{}}},"id":7844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21325:25:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":7847,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21362:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$8564","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$8564","typeString":"contract ProtocolFeeController"}],"id":7846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21354:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7845,"name":"address","nodeType":"ElementaryTypeName","src":"21354:7:44","typeDescriptions":{}}},"id":7848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21325:42:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7854,"nodeType":"IfStatement","src":"21321:104:44","trueBody":{"id":7853,"nodeType":"Block","src":"21369:56:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7850,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6979,"src":"21390:22:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21390:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7852,"nodeType":"RevertStatement","src":"21383:31:44"}]}},{"condition":{"baseExpression":{"id":7855,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6949,"src":"21439:16:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":7857,"indexExpression":{"id":7856,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"21456:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21439:22:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7863,"nodeType":"IfStatement","src":"21435:87:44","trueBody":{"id":7862,"nodeType":"Block","src":"21463:59:44","statements":[{"errorCall":{"arguments":[{"id":7859,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"21506:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7858,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6976,"src":"21484:21:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21484:27:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7861,"nodeType":"RevertStatement","src":"21477:34:44"}]}},{"expression":{"id":7868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7864,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6949,"src":"21532:16:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":7866,"indexExpression":{"id":7865,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"21549:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21532:22:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":7867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21557:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21532:29:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7869,"nodeType":"ExpressionStatement","src":"21532:29:44"},{"assignments":[7871,7873],"declarations":[{"constant":false,"id":7871,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21581:25:44","nodeType":"VariableDeclaration","scope":7946,"src":"21573:33:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7870,"name":"uint256","nodeType":"ElementaryTypeName","src":"21573:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7873,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21613:17:44","nodeType":"VariableDeclaration","scope":7946,"src":"21608:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7872,"name":"bool","nodeType":"ElementaryTypeName","src":"21608:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":7878,"initialValue":{"arguments":[{"id":7876,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"21678:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7874,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7836,"src":"21634:16:44","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":7875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21651:26:44","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1515,"src":"21634:43:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":7877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21634:49:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21572:111:44"},{"expression":{"id":7888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7879,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"21693:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7881,"indexExpression":{"id":7880,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"21725:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21693:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7883,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7871,"src":"21776:25:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21802:8:44","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"21776:34:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":7885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21776:36:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":7886,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7873,"src":"21838:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7882,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"21733:13:44","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$6922_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":7887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21761:13:44","21826:10:44"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21733:133:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21693:173:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7889,"nodeType":"ExpressionStatement","src":"21693:173:44"},{"assignments":[7891,7893],"declarations":[{"constant":false,"id":7891,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21886:26:44","nodeType":"VariableDeclaration","scope":7946,"src":"21878:34:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7890,"name":"uint256","nodeType":"ElementaryTypeName","src":"21878:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7893,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21919:18:44","nodeType":"VariableDeclaration","scope":7946,"src":"21914:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7892,"name":"bool","nodeType":"ElementaryTypeName","src":"21914:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":7898,"initialValue":{"arguments":[{"id":7896,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"21999:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7894,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7836,"src":"21941:16:44","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":7895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21958:27:44","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1525,"src":"21941:44:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":7897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21941:72:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21877:136:44"},{"expression":{"id":7908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7899,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"22023:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7901,"indexExpression":{"id":7900,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"22056:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22023:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7903,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7891,"src":"22107:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22134:8:44","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"22107:35:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":7905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22107:37:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":7906,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7893,"src":"22170:18:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7902,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"22064:13:44","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$6922_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":7907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22092:13:44","22158:10:44"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"22064:135:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"22023:176:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7909,"nodeType":"ExpressionStatement","src":"22023:176:44"},{"clauses":[{"block":{"id":7923,"nodeType":"Block","src":"22833:92:44","statements":[{"expression":{"id":7921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7917,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"22847:30:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7919,"indexExpression":{"id":7918,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"22878:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22847:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7920,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"22886:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22847:67:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7922,"nodeType":"ExpressionStatement","src":"22847:67:44"}]},"errorName":"","id":7924,"nodeType":"TryCatchClause","parameters":{"id":7916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7915,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22803:28:44","nodeType":"VariableDeclaration","scope":7924,"src":"22795:36:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7914,"name":"uint256","nodeType":"ElementaryTypeName","src":"22795:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22794:38:44"},"src":"22786:139:44"},{"block":{"id":7925,"nodeType":"Block","src":"22932:72:44","statements":[]},"errorName":"","id":7926,"nodeType":"TryCatchClause","src":"22926:78:44"}],"externalCall":{"arguments":[{"id":7912,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"22780:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7910,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7836,"src":"22731:16:44","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":7911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22748:31:44","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1533,"src":"22731:48:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22731:54:44","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7927,"nodeType":"TryStatement","src":"22727:277:44"},{"clauses":[{"block":{"id":7941,"nodeType":"Block","src":"23122:94:44","statements":[{"expression":{"id":7939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7935,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6957,"src":"23136:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7937,"indexExpression":{"id":7936,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"23168:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23136:37:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7938,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"23176:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23136:69:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7940,"nodeType":"ExpressionStatement","src":"23136:69:44"}]},"errorName":"","id":7942,"nodeType":"TryCatchClause","parameters":{"id":7934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7933,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"23091:29:44","nodeType":"VariableDeclaration","scope":7942,"src":"23083:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7932,"name":"uint256","nodeType":"ElementaryTypeName","src":"23083:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23082:39:44"},"src":"23074:142:44"},{"block":{"id":7943,"nodeType":"Block","src":"23223:72:44","statements":[]},"errorName":"","id":7944,"nodeType":"TryCatchClause","src":"23217:78:44"}],"externalCall":{"arguments":[{"id":7930,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"23068:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7928,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7836,"src":"23018:16:44","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":7929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23035:32:44","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1541,"src":"23018:49:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23018:55:44","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7945,"nodeType":"TryStatement","src":"23014:281:44"}]},"documentation":{"id":7829,"nodeType":"StructuredDocumentation","src":"20231:945:44","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":7947,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"21190:11:44","nodeType":"FunctionDefinition","parameters":{"id":7832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7831,"mutability":"mutable","name":"pool","nameLocation":"21210:4:44","nodeType":"VariableDeclaration","scope":7947,"src":"21202:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7830,"name":"address","nodeType":"ElementaryTypeName","src":"21202:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21201:14:44"},"returnParameters":{"id":7833,"nodeType":"ParameterList","parameters":[],"src":"21225:0:44"},"scope":8564,"src":"21181:2120:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1595],"body":{"id":8023,"nodeType":"Block","src":"23780:1540:44","statements":[{"expression":{"id":7967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7963,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6949,"src":"23790:16:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":7965,"indexExpression":{"id":7964,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7950,"src":"23807:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23790:22:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":7966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23815:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23790:29:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7968,"nodeType":"ExpressionStatement","src":"23790:29:44"},{"expression":{"id":7974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7969,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7959,"src":"23919:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":7970,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"23948:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":7972,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6933,"src":"23972:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23948:56:44","trueExpression":{"hexValue":"30","id":7971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23968:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23919:85:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7975,"nodeType":"ExpressionStatement","src":"23919:85:44"},{"expression":{"id":7981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7976,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"24014:27:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":7977,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"24044:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":7979,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"24068:33:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24044:57:44","trueExpression":{"hexValue":"30","id":7978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24064:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24014:87:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7982,"nodeType":"ExpressionStatement","src":"24014:87:44"},{"expression":{"id":7992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7983,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"24549:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7985,"indexExpression":{"id":7984,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7950,"src":"24581:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24549:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7987,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7959,"src":"24632:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24659:8:44","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"24632:35:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":7989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24632:37:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":7990,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"24695:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7986,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"24589:13:44","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$6922_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":7991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24617:13:44","24683:10:44"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24589:134:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24549:174:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7993,"nodeType":"ExpressionStatement","src":"24549:174:44"},{"expression":{"id":8003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7994,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"24733:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7996,"indexExpression":{"id":7995,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7950,"src":"24766:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24733:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7998,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"24817:27:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24845:8:44","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"24817:36:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24817:38:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8001,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"24881:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":7997,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"24774:13:44","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$6922_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24802:13:44","24869:10:44"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24774:135:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24733:176:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8004,"nodeType":"ExpressionStatement","src":"24733:176:44"},{"eventCall":{"arguments":[{"id":8006,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7950,"src":"25069:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8007,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7959,"src":"25075:26:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8008,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"25103:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8005,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1433,"src":"25031:37:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25031:90:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8010,"nodeType":"EmitStatement","src":"25026:95:44"},{"eventCall":{"arguments":[{"id":8012,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7950,"src":"25175:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8013,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"25181:27:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8014,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"25210:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8011,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"25136:38:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25136:92:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8016,"nodeType":"EmitStatement","src":"25131:97:44"},{"eventCall":{"arguments":[{"id":8018,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7950,"src":"25276:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8019,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7952,"src":"25282:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8020,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"25295:17:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8017,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1451,"src":"25244:31:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":8021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25244:69:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8022,"nodeType":"EmitStatement","src":"25239:74:44"}]},"documentation":{"id":7948,"nodeType":"StructuredDocumentation","src":"23525:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":8024,"implemented":true,"kind":"function","modifiers":[{"id":7957,"kind":"modifierInvocation","modifierName":{"id":7956,"name":"onlyVault","nameLocations":["23688:9:44"],"nodeType":"IdentifierPath","referencedDeclaration":8651,"src":"23688:9:44"},"nodeType":"ModifierInvocation","src":"23688:9:44"}],"name":"registerPool","nameLocation":"23577:12:44","nodeType":"FunctionDefinition","parameters":{"id":7955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7950,"mutability":"mutable","name":"pool","nameLocation":"23607:4:44","nodeType":"VariableDeclaration","scope":8024,"src":"23599:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7949,"name":"address","nodeType":"ElementaryTypeName","src":"23599:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7952,"mutability":"mutable","name":"poolCreator","nameLocation":"23629:11:44","nodeType":"VariableDeclaration","scope":8024,"src":"23621:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7951,"name":"address","nodeType":"ElementaryTypeName","src":"23621:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7954,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23655:17:44","nodeType":"VariableDeclaration","scope":8024,"src":"23650:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7953,"name":"bool","nodeType":"ElementaryTypeName","src":"23650:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23589:89:44"},"returnParameters":{"id":7962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7959,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23715:26:44","nodeType":"VariableDeclaration","scope":8024,"src":"23707:34:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7958,"name":"uint256","nodeType":"ElementaryTypeName","src":"23707:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7961,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23751:27:44","nodeType":"VariableDeclaration","scope":8024,"src":"23743:35:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7960,"name":"uint256","nodeType":"ElementaryTypeName","src":"23743:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23706:73:44"},"scope":8564,"src":"23568:1752:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1601],"body":{"id":8036,"nodeType":"Block","src":"25473:82:44","statements":[{"expression":{"arguments":[{"id":8033,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8027,"src":"25519:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8032,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8054,"src":"25483:35:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25483:65:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8035,"nodeType":"ExpressionStatement","src":"25483:65:44"}]},"documentation":{"id":8025,"nodeType":"StructuredDocumentation","src":"25326:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":8037,"implemented":true,"kind":"function","modifiers":[{"id":8030,"kind":"modifierInvocation","modifierName":{"id":8029,"name":"authenticate","nameLocations":["25460:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"25460:12:44"},"nodeType":"ModifierInvocation","src":"25460:12:44"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25378:34:44","nodeType":"FunctionDefinition","parameters":{"id":8028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8027,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25421:28:44","nodeType":"VariableDeclaration","scope":8037,"src":"25413:36:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8026,"name":"uint256","nodeType":"ElementaryTypeName","src":"25413:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25412:38:44"},"returnParameters":{"id":8031,"nodeType":"ParameterList","parameters":[],"src":"25473:0:44"},"scope":8564,"src":"25369:186:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8053,"nodeType":"Block","src":"25714:164:44","statements":[{"expression":{"id":8047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8045,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6933,"src":"25724:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8046,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8039,"src":"25759:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:63:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8048,"nodeType":"ExpressionStatement","src":"25724:63:44"},{"eventCall":{"arguments":[{"id":8050,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8039,"src":"25842:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8049,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1347,"src":"25803:38:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25803:68:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8052,"nodeType":"EmitStatement","src":"25798:73:44"}]},"id":8054,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8042,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8039,"src":"25684:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8043,"kind":"modifierInvocation","modifierName":{"id":8041,"name":"withValidSwapFee","nameLocations":["25667:16:44"],"nodeType":"IdentifierPath","referencedDeclaration":7007,"src":"25667:16:44"},"nodeType":"ModifierInvocation","src":"25667:46:44"}],"name":"_setGlobalProtocolSwapFeePercentage","nameLocation":"25570:35:44","nodeType":"FunctionDefinition","parameters":{"id":8040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8039,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25623:28:44","nodeType":"VariableDeclaration","scope":8054,"src":"25615:36:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8038,"name":"uint256","nodeType":"ElementaryTypeName","src":"25615:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25605:52:44"},"returnParameters":{"id":8044,"nodeType":"ParameterList","parameters":[],"src":"25714:0:44"},"scope":8564,"src":"25561:317:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1607],"body":{"id":8066,"nodeType":"Block","src":"26033:84:44","statements":[{"expression":{"arguments":[{"id":8063,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"26080:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8062,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8084,"src":"26043:36:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26043:67:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8065,"nodeType":"ExpressionStatement","src":"26043:67:44"}]},"documentation":{"id":8055,"nodeType":"StructuredDocumentation","src":"25884:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":8067,"implemented":true,"kind":"function","modifiers":[{"id":8060,"kind":"modifierInvocation","modifierName":{"id":8059,"name":"authenticate","nameLocations":["26020:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"26020:12:44"},"nodeType":"ModifierInvocation","src":"26020:12:44"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25936:35:44","nodeType":"FunctionDefinition","parameters":{"id":8058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8057,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25980:29:44","nodeType":"VariableDeclaration","scope":8067,"src":"25972:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8056,"name":"uint256","nodeType":"ElementaryTypeName","src":"25972:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25971:39:44"},"returnParameters":{"id":8061,"nodeType":"ParameterList","parameters":[],"src":"26033:0:44"},"scope":8564,"src":"25927:190:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8083,"nodeType":"Block","src":"26280:168:44","statements":[{"expression":{"id":8077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8075,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"26290:33:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8076,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"26326:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26290:65:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8078,"nodeType":"ExpressionStatement","src":"26290:65:44"},{"eventCall":{"arguments":[{"id":8080,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"26411:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8079,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"26371:39:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26371:70:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8082,"nodeType":"EmitStatement","src":"26366:75:44"}]},"id":8084,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8072,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8069,"src":"26249:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8073,"kind":"modifierInvocation","modifierName":{"id":8071,"name":"withValidYieldFee","nameLocations":["26231:17:44"],"nodeType":"IdentifierPath","referencedDeclaration":7025,"src":"26231:17:44"},"nodeType":"ModifierInvocation","src":"26231:48:44"}],"name":"_setGlobalProtocolYieldFeePercentage","nameLocation":"26132:36:44","nodeType":"FunctionDefinition","parameters":{"id":8070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8069,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26186:29:44","nodeType":"VariableDeclaration","scope":8084,"src":"26178:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8068,"name":"uint256","nodeType":"ElementaryTypeName","src":"26178:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26168:53:44"},"returnParameters":{"id":8074,"nodeType":"ParameterList","parameters":[],"src":"26280:0:44"},"scope":8564,"src":"26123:325:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1615],"body":{"id":8106,"nodeType":"Block","src":"26699:87:44","statements":[{"expression":{"arguments":[{"id":8101,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8087,"src":"26738:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8102,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8089,"src":"26744:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26774:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8100,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8504,"src":"26709:28:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26709:70:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8105,"nodeType":"ExpressionStatement","src":"26709:70:44"}]},"documentation":{"id":8085,"nodeType":"StructuredDocumentation","src":"26454:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":8107,"implemented":true,"kind":"function","modifiers":[{"id":8092,"kind":"modifierInvocation","modifierName":{"id":8091,"name":"authenticate","nameLocations":["26618:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"26618:12:44"},"nodeType":"ModifierInvocation","src":"26618:12:44"},{"arguments":[{"id":8094,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8089,"src":"26648:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8095,"kind":"modifierInvocation","modifierName":{"id":8093,"name":"withValidSwapFee","nameLocations":["26631:16:44"],"nodeType":"IdentifierPath","referencedDeclaration":7007,"src":"26631:16:44"},"nodeType":"ModifierInvocation","src":"26631:46:44"},{"arguments":[{"id":8097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8087,"src":"26693:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8098,"kind":"modifierInvocation","modifierName":{"id":8096,"name":"withLatestFees","nameLocations":["26678:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"26678:14:44"},"nodeType":"ModifierInvocation","src":"26678:20:44"}],"name":"setProtocolSwapFeePercentage","nameLocation":"26506:28:44","nodeType":"FunctionDefinition","parameters":{"id":8090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8087,"mutability":"mutable","name":"pool","nameLocation":"26552:4:44","nodeType":"VariableDeclaration","scope":8107,"src":"26544:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8086,"name":"address","nodeType":"ElementaryTypeName","src":"26544:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8089,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"26574:28:44","nodeType":"VariableDeclaration","scope":8107,"src":"26566:36:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8088,"name":"uint256","nodeType":"ElementaryTypeName","src":"26566:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26534:74:44"},"returnParameters":{"id":8099,"nodeType":"ParameterList","parameters":[],"src":"26699:0:44"},"scope":8564,"src":"26497:289:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1623],"body":{"id":8129,"nodeType":"Block","src":"27041:89:44","statements":[{"expression":{"arguments":[{"id":8124,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8110,"src":"27081:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8125,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8112,"src":"27087:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27118:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8123,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8542,"src":"27051:29:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27051:72:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8128,"nodeType":"ExpressionStatement","src":"27051:72:44"}]},"documentation":{"id":8108,"nodeType":"StructuredDocumentation","src":"26792:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":8130,"implemented":true,"kind":"function","modifiers":[{"id":8115,"kind":"modifierInvocation","modifierName":{"id":8114,"name":"authenticate","nameLocations":["26958:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"26958:12:44"},"nodeType":"ModifierInvocation","src":"26958:12:44"},{"arguments":[{"id":8117,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8112,"src":"26989:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8118,"kind":"modifierInvocation","modifierName":{"id":8116,"name":"withValidYieldFee","nameLocations":["26971:17:44"],"nodeType":"IdentifierPath","referencedDeclaration":7025,"src":"26971:17:44"},"nodeType":"ModifierInvocation","src":"26971:48:44"},{"arguments":[{"id":8120,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8110,"src":"27035:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8121,"kind":"modifierInvocation","modifierName":{"id":8119,"name":"withLatestFees","nameLocations":["27020:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"27020:14:44"},"nodeType":"ModifierInvocation","src":"27020:20:44"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26844:29:44","nodeType":"FunctionDefinition","parameters":{"id":8113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8110,"mutability":"mutable","name":"pool","nameLocation":"26891:4:44","nodeType":"VariableDeclaration","scope":8130,"src":"26883:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8109,"name":"address","nodeType":"ElementaryTypeName","src":"26883:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8112,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26913:29:44","nodeType":"VariableDeclaration","scope":8130,"src":"26905:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8111,"name":"uint256","nodeType":"ElementaryTypeName","src":"26905:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26873:75:44"},"returnParameters":{"id":8122,"nodeType":"ParameterList","parameters":[],"src":"27041:0:44"},"scope":8564,"src":"26835:295:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1631],"body":{"id":8154,"nodeType":"Block","src":"27400:103:44","statements":[{"expression":{"arguments":[{"id":8148,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"27439:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8149,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"27445:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8150,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"27475:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27491:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"27475:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8147,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"27410:28:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$6916_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27410:86:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8153,"nodeType":"ExpressionStatement","src":"27410:86:44"}]},"documentation":{"id":8131,"nodeType":"StructuredDocumentation","src":"27136:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":8155,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8138,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"27319:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8139,"kind":"modifierInvocation","modifierName":{"id":8137,"name":"onlyPoolCreator","nameLocations":["27303:15:44"],"nodeType":"IdentifierPath","referencedDeclaration":6989,"src":"27303:15:44"},"nodeType":"ModifierInvocation","src":"27303:21:44"},{"arguments":[{"id":8141,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"27349:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8142,"kind":"modifierInvocation","modifierName":{"id":8140,"name":"withValidPoolCreatorFee","nameLocations":["27325:23:44"],"nodeType":"IdentifierPath","referencedDeclaration":7039,"src":"27325:23:44"},"nodeType":"ModifierInvocation","src":"27325:53:44"},{"arguments":[{"id":8144,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"27394:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8145,"kind":"modifierInvocation","modifierName":{"id":8143,"name":"withLatestFees","nameLocations":["27379:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"27379:14:44"},"nodeType":"ModifierInvocation","src":"27379:20:44"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"27188:31:44","nodeType":"FunctionDefinition","parameters":{"id":8136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8133,"mutability":"mutable","name":"pool","nameLocation":"27237:4:44","nodeType":"VariableDeclaration","scope":8155,"src":"27229:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8132,"name":"address","nodeType":"ElementaryTypeName","src":"27229:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8135,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"27259:28:44","nodeType":"VariableDeclaration","scope":8155,"src":"27251:36:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8134,"name":"uint256","nodeType":"ElementaryTypeName","src":"27251:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27219:74:44"},"returnParameters":{"id":8146,"nodeType":"ParameterList","parameters":[],"src":"27400:0:44"},"scope":8564,"src":"27179:324:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1639],"body":{"id":8179,"nodeType":"Block","src":"27776:105:44","statements":[{"expression":{"arguments":[{"id":8173,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8158,"src":"27815:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8174,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8160,"src":"27821:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8175,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"27852:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27868:5:44","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":6915,"src":"27852:21:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8172,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"27786:28:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$6916_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27786:88:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8178,"nodeType":"ExpressionStatement","src":"27786:88:44"}]},"documentation":{"id":8156,"nodeType":"StructuredDocumentation","src":"27509:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":8180,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8163,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8158,"src":"27694:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8164,"kind":"modifierInvocation","modifierName":{"id":8162,"name":"onlyPoolCreator","nameLocations":["27678:15:44"],"nodeType":"IdentifierPath","referencedDeclaration":6989,"src":"27678:15:44"},"nodeType":"ModifierInvocation","src":"27678:21:44"},{"arguments":[{"id":8166,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8160,"src":"27724:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8167,"kind":"modifierInvocation","modifierName":{"id":8165,"name":"withValidPoolCreatorFee","nameLocations":["27700:23:44"],"nodeType":"IdentifierPath","referencedDeclaration":7039,"src":"27700:23:44"},"nodeType":"ModifierInvocation","src":"27700:54:44"},{"arguments":[{"id":8169,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8158,"src":"27770:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8170,"kind":"modifierInvocation","modifierName":{"id":8168,"name":"withLatestFees","nameLocations":["27755:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":7049,"src":"27755:14:44"},"nodeType":"ModifierInvocation","src":"27755:20:44"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"27561:32:44","nodeType":"FunctionDefinition","parameters":{"id":8161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8158,"mutability":"mutable","name":"pool","nameLocation":"27611:4:44","nodeType":"VariableDeclaration","scope":8180,"src":"27603:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8157,"name":"address","nodeType":"ElementaryTypeName","src":"27603:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8160,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"27633:29:44","nodeType":"VariableDeclaration","scope":8180,"src":"27625:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8159,"name":"uint256","nodeType":"ElementaryTypeName","src":"27625:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27593:75:44"},"returnParameters":{"id":8171,"nodeType":"ParameterList","parameters":[],"src":"27776:0:44"},"scope":8564,"src":"27552:329:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8241,"nodeType":"Block","src":"28037:900:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8190,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8187,"src":"28133:7:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8191,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"28144:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28160:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"28144:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"28133:31:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8239,"nodeType":"Block","src":"28549:382:44","statements":[{"expression":{"id":8221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8217,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6957,"src":"28563:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8219,"indexExpression":{"id":8218,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28595:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28563:37:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8220,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8184,"src":"28603:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28563:64:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8222,"nodeType":"ExpressionStatement","src":"28563:64:44"},{"expression":{"arguments":[{"id":8226,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28770:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8228,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28803:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8229,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"28809:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28825:5:44","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":6915,"src":"28809:21:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8227,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7719,"src":"28776:26:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$6916_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:55:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8223,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"28729:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28736:33:44","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2463,"src":"28729:40:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28729:103:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8233,"nodeType":"ExpressionStatement","src":"28729:103:44"},{"eventCall":{"arguments":[{"id":8235,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28889:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8236,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8184,"src":"28895:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8234,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1380,"src":"28852:36:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28852:68:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8238,"nodeType":"EmitStatement","src":"28847:73:44"}]},"id":8240,"nodeType":"IfStatement","src":"28129:802:44","trueBody":{"id":8216,"nodeType":"Block","src":"28166:377:44","statements":[{"expression":{"id":8198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8194,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"28180:30:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8196,"indexExpression":{"id":8195,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28211:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28180:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8197,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8184,"src":"28219:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28180:63:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8199,"nodeType":"ExpressionStatement","src":"28180:63:44"},{"expression":{"arguments":[{"id":8203,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28384:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8205,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28417:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8206,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"28423:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28439:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"28423:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8204,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7719,"src":"28390:26:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$6916_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28390:54:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8200,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"28344:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28351:32:44","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2455,"src":"28344:39:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28344:101:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8210,"nodeType":"ExpressionStatement","src":"28344:101:44"},{"eventCall":{"arguments":[{"id":8212,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"28501:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8213,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8184,"src":"28507:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8211,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1373,"src":"28465:35:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28465:67:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8215,"nodeType":"EmitStatement","src":"28460:72:44"}]}}]},"id":8242,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27896:28:44","nodeType":"FunctionDefinition","parameters":{"id":8188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8182,"mutability":"mutable","name":"pool","nameLocation":"27942:4:44","nodeType":"VariableDeclaration","scope":8242,"src":"27934:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8181,"name":"address","nodeType":"ElementaryTypeName","src":"27934:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8184,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27964:24:44","nodeType":"VariableDeclaration","scope":8242,"src":"27956:32:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8183,"name":"uint256","nodeType":"ElementaryTypeName","src":"27956:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8187,"mutability":"mutable","name":"feeType","nameLocation":"28014:7:44","nodeType":"VariableDeclaration","scope":8242,"src":"27998:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8186,"nodeType":"UserDefinedTypeName","pathNode":{"id":8185,"name":"ProtocolFeeType","nameLocations":["27998:15:44"],"nodeType":"IdentifierPath","referencedDeclaration":6916,"src":"27998:15:44"},"referencedDeclaration":6916,"src":"27998:15:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27924:103:44"},"returnParameters":{"id":8189,"nodeType":"ParameterList","parameters":[],"src":"28037:0:44"},"scope":8564,"src":"27887:1050:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1647],"body":{"id":8288,"nodeType":"Block","src":"29071:258:44","statements":[{"assignments":[8256,8258],"declarations":[{"constant":false,"id":8256,"mutability":"mutable","name":"poolTokens","nameLocation":"29098:10:44","nodeType":"VariableDeclaration","scope":8288,"src":"29082:26:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8254,"nodeType":"UserDefinedTypeName","pathNode":{"id":8253,"name":"IERC20","nameLocations":["29082:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"29082:6:44"},"referencedDeclaration":9632,"src":"29082:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":8255,"nodeType":"ArrayTypeName","src":"29082:8:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8258,"mutability":"mutable","name":"numTokens","nameLocation":"29118:9:44","nodeType":"VariableDeclaration","scope":8288,"src":"29110:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8257,"name":"uint256","nodeType":"ElementaryTypeName","src":"29110:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8262,"initialValue":{"arguments":[{"id":8260,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8245,"src":"29154:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8259,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7809,"src":"29131:22:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29131:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29081:78:44"},{"body":{"id":8286,"nodeType":"Block","src":"29210:113:44","statements":[{"assignments":[8275],"declarations":[{"constant":false,"id":8275,"mutability":"mutable","name":"token","nameLocation":"29231:5:44","nodeType":"VariableDeclaration","scope":8286,"src":"29224:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":8274,"nodeType":"UserDefinedTypeName","pathNode":{"id":8273,"name":"IERC20","nameLocations":["29224:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"29224:6:44"},"referencedDeclaration":9632,"src":"29224:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":8279,"initialValue":{"baseExpression":{"id":8276,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8256,"src":"29239:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8278,"indexExpression":{"id":8277,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8264,"src":"29250:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29239:13:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29224:28:44"},{"expression":{"arguments":[{"id":8281,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8245,"src":"29289:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8282,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"29295:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8283,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"29306:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":8280,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8362,"src":"29267:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$9632_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29267:45:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8285,"nodeType":"ExpressionStatement","src":"29267:45:44"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8264,"src":"29190:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8268,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8258,"src":"29194:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29190:13:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8287,"initializationExpression":{"assignments":[8264],"declarations":[{"constant":false,"id":8264,"mutability":"mutable","name":"i","nameLocation":"29183:1:44","nodeType":"VariableDeclaration","scope":8287,"src":"29175:9:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8263,"name":"uint256","nodeType":"ElementaryTypeName","src":"29175:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8266,"initialValue":{"hexValue":"30","id":8265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29187:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29175:13:44"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29205:3:44","subExpression":{"id":8270,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8264,"src":"29207:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8272,"nodeType":"ExpressionStatement","src":"29205:3:44"},"nodeType":"ForStatement","src":"29170:153:44"}]},"documentation":{"id":8243,"nodeType":"StructuredDocumentation","src":"28943:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":8289,"implemented":true,"kind":"function","modifiers":[{"id":8250,"kind":"modifierInvocation","modifierName":{"id":8249,"name":"authenticate","nameLocations":["29058:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"29058:12:44"},"nodeType":"ModifierInvocation","src":"29058:12:44"}],"name":"withdrawProtocolFees","nameLocation":"28995:20:44","nodeType":"FunctionDefinition","parameters":{"id":8248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8245,"mutability":"mutable","name":"pool","nameLocation":"29024:4:44","nodeType":"VariableDeclaration","scope":8289,"src":"29016:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8244,"name":"address","nodeType":"ElementaryTypeName","src":"29016:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8247,"mutability":"mutable","name":"recipient","nameLocation":"29038:9:44","nodeType":"VariableDeclaration","scope":8289,"src":"29030:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8246,"name":"address","nodeType":"ElementaryTypeName","src":"29030:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29015:33:44"},"returnParameters":{"id":8251,"nodeType":"ParameterList","parameters":[],"src":"29071:0:44"},"scope":8564,"src":"28986:343:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1658],"body":{"id":8315,"nodeType":"Block","src":"29485:217:44","statements":[{"expression":{"arguments":[{"id":8305,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"29628:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8306,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8297,"src":"29634:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"expression":{"id":8302,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"29588:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29595:32:44","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":3724,"src":"29588:39:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$9632_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":8307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29588:52:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":8308,"nodeType":"ExpressionStatement","src":"29588:52:44"},{"expression":{"arguments":[{"id":8310,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"29672:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8311,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8294,"src":"29678:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8312,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8297,"src":"29689:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":8309,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8362,"src":"29650:21:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$9632_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29650:45:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8314,"nodeType":"ExpressionStatement","src":"29650:45:44"}]},"documentation":{"id":8290,"nodeType":"StructuredDocumentation","src":"29335:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":8316,"implemented":true,"kind":"function","modifiers":[{"id":8300,"kind":"modifierInvocation","modifierName":{"id":8299,"name":"authenticate","nameLocations":["29472:12:44"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"29472:12:44"},"nodeType":"ModifierInvocation","src":"29472:12:44"}],"name":"withdrawProtocolFeesForToken","nameLocation":"29387:28:44","nodeType":"FunctionDefinition","parameters":{"id":8298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8292,"mutability":"mutable","name":"pool","nameLocation":"29424:4:44","nodeType":"VariableDeclaration","scope":8316,"src":"29416:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8291,"name":"address","nodeType":"ElementaryTypeName","src":"29416:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8294,"mutability":"mutable","name":"recipient","nameLocation":"29438:9:44","nodeType":"VariableDeclaration","scope":8316,"src":"29430:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8293,"name":"address","nodeType":"ElementaryTypeName","src":"29430:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8297,"mutability":"mutable","name":"token","nameLocation":"29456:5:44","nodeType":"VariableDeclaration","scope":8316,"src":"29449:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":8296,"nodeType":"UserDefinedTypeName","pathNode":{"id":8295,"name":"IERC20","nameLocations":["29449:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"29449:6:44"},"referencedDeclaration":9632,"src":"29449:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29415:47:44"},"returnParameters":{"id":8301,"nodeType":"ParameterList","parameters":[],"src":"29485:0:44"},"scope":8564,"src":"29378:324:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8361,"nodeType":"Block","src":"29795:316:44","statements":[{"assignments":[8327],"declarations":[{"constant":false,"id":8327,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29813:16:44","nodeType":"VariableDeclaration","scope":8361,"src":"29805:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8326,"name":"uint256","nodeType":"ElementaryTypeName","src":"29805:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8333,"initialValue":{"baseExpression":{"baseExpression":{"id":8328,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"29832:19:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8330,"indexExpression":{"id":8329,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8318,"src":"29852:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:25:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8332,"indexExpression":{"id":8331,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"29858:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29805:59:44"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8334,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"29878:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":8335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29897:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29878:20:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8360,"nodeType":"IfStatement","src":"29874:231:44","trueBody":{"id":8359,"nodeType":"Block","src":"29900:205:44","statements":[{"expression":{"id":8343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8337,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"29914:19:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8340,"indexExpression":{"id":8338,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8318,"src":"29934:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29914:25:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8341,"indexExpression":{"id":8339,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"29940:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29914:32:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29949:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29914:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8344,"nodeType":"ExpressionStatement","src":"29914:36:44"},{"expression":{"arguments":[{"id":8348,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8320,"src":"29983:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8349,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"29994:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8345,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"29964:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":8347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29970:12:44","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"29964:18:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":8350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29964:47:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8351,"nodeType":"ExpressionStatement","src":"29964:47:44"},{"eventCall":{"arguments":[{"id":8353,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8318,"src":"30053:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8354,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"30059:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":8355,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8320,"src":"30066:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8356,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"30077:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8352,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1412,"src":"30031:21:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":8357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30031:63:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8358,"nodeType":"EmitStatement","src":"30026:68:44"}]}}]},"id":8362,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29717:21:44","nodeType":"FunctionDefinition","parameters":{"id":8324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8318,"mutability":"mutable","name":"pool","nameLocation":"29747:4:44","nodeType":"VariableDeclaration","scope":8362,"src":"29739:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8317,"name":"address","nodeType":"ElementaryTypeName","src":"29739:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8320,"mutability":"mutable","name":"recipient","nameLocation":"29761:9:44","nodeType":"VariableDeclaration","scope":8362,"src":"29753:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8319,"name":"address","nodeType":"ElementaryTypeName","src":"29753:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8323,"mutability":"mutable","name":"token","nameLocation":"29779:5:44","nodeType":"VariableDeclaration","scope":8362,"src":"29772:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":8322,"nodeType":"UserDefinedTypeName","pathNode":{"id":8321,"name":"IERC20","nameLocations":["29772:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"29772:6:44"},"referencedDeclaration":9632,"src":"29772:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29738:47:44"},"returnParameters":{"id":8325,"nodeType":"ParameterList","parameters":[],"src":"29795:0:44"},"scope":8564,"src":"29708:403:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1666],"body":{"id":8378,"nodeType":"Block","src":"30257:58:44","statements":[{"expression":{"arguments":[{"id":8374,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8365,"src":"30292:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8375,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"30298:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8373,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8466,"src":"30267:24:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":8376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30267:41:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8377,"nodeType":"ExpressionStatement","src":"30267:41:44"}]},"documentation":{"id":8363,"nodeType":"StructuredDocumentation","src":"30117:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":8379,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8370,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8365,"src":"30251:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8371,"kind":"modifierInvocation","modifierName":{"id":8369,"name":"onlyPoolCreator","nameLocations":["30235:15:44"],"nodeType":"IdentifierPath","referencedDeclaration":6989,"src":"30235:15:44"},"nodeType":"ModifierInvocation","src":"30235:21:44"}],"name":"withdrawPoolCreatorFees","nameLocation":"30169:23:44","nodeType":"FunctionDefinition","parameters":{"id":8368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8365,"mutability":"mutable","name":"pool","nameLocation":"30201:4:44","nodeType":"VariableDeclaration","scope":8379,"src":"30193:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8364,"name":"address","nodeType":"ElementaryTypeName","src":"30193:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8367,"mutability":"mutable","name":"recipient","nameLocation":"30215:9:44","nodeType":"VariableDeclaration","scope":8379,"src":"30207:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8366,"name":"address","nodeType":"ElementaryTypeName","src":"30207:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30192:33:44"},"returnParameters":{"id":8372,"nodeType":"ParameterList","parameters":[],"src":"30257:0:44"},"scope":8564,"src":"30160:155:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1672],"body":{"id":8392,"nodeType":"Block","src":"30420:70:44","statements":[{"expression":{"arguments":[{"id":8386,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8382,"src":"30455:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8388,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8382,"src":"30477:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8387,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"30461:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":8389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30461:21:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8385,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8466,"src":"30430:24:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":8390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30430:53:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8391,"nodeType":"ExpressionStatement","src":"30430:53:44"}]},"documentation":{"id":8380,"nodeType":"StructuredDocumentation","src":"30321:38:44","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":8393,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"30373:23:44","nodeType":"FunctionDefinition","parameters":{"id":8383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8382,"mutability":"mutable","name":"pool","nameLocation":"30405:4:44","nodeType":"VariableDeclaration","scope":8393,"src":"30397:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8381,"name":"address","nodeType":"ElementaryTypeName","src":"30397:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30396:14:44"},"returnParameters":{"id":8384,"nodeType":"ParameterList","parameters":[],"src":"30420:0:44"},"scope":8564,"src":"30364:126:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8465,"nodeType":"Block","src":"30571:541:44","statements":[{"assignments":[8404,8406],"declarations":[{"constant":false,"id":8404,"mutability":"mutable","name":"poolTokens","nameLocation":"30598:10:44","nodeType":"VariableDeclaration","scope":8465,"src":"30582:26:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8402,"nodeType":"UserDefinedTypeName","pathNode":{"id":8401,"name":"IERC20","nameLocations":["30582:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"30582:6:44"},"referencedDeclaration":9632,"src":"30582:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":8403,"nodeType":"ArrayTypeName","src":"30582:8:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8406,"mutability":"mutable","name":"numTokens","nameLocation":"30618:9:44","nodeType":"VariableDeclaration","scope":8465,"src":"30610:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8405,"name":"uint256","nodeType":"ElementaryTypeName","src":"30610:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8410,"initialValue":{"arguments":[{"id":8408,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8395,"src":"30654:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8407,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7809,"src":"30631:22:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30631:28:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"30581:78:44"},{"body":{"id":8463,"nodeType":"Block","src":"30710:396:44","statements":[{"assignments":[8423],"declarations":[{"constant":false,"id":8423,"mutability":"mutable","name":"token","nameLocation":"30731:5:44","nodeType":"VariableDeclaration","scope":8463,"src":"30724:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":8422,"nodeType":"UserDefinedTypeName","pathNode":{"id":8421,"name":"IERC20","nameLocations":["30724:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"30724:6:44"},"referencedDeclaration":9632,"src":"30724:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":8427,"initialValue":{"baseExpression":{"id":8424,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8404,"src":"30739:10:44","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8426,"indexExpression":{"id":8425,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8412,"src":"30750:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30739:13:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30724:28:44"},{"assignments":[8429],"declarations":[{"constant":false,"id":8429,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30775:16:44","nodeType":"VariableDeclaration","scope":8463,"src":"30767:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8428,"name":"uint256","nodeType":"ElementaryTypeName","src":"30767:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8435,"initialValue":{"baseExpression":{"baseExpression":{"id":8430,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"30794:22:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8432,"indexExpression":{"id":8431,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8395,"src":"30817:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:28:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8434,"indexExpression":{"id":8433,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"30823:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:35:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30767:62:44"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8436,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"30847:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":8437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30866:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30847:20:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8462,"nodeType":"IfStatement","src":"30843:253:44","trueBody":{"id":8461,"nodeType":"Block","src":"30869:227:44","statements":[{"expression":{"id":8445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8439,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"30887:22:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8442,"indexExpression":{"id":8440,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8395,"src":"30910:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30887:28:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8443,"indexExpression":{"id":8441,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"30916:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30887:35:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30925:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30887:39:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8446,"nodeType":"ExpressionStatement","src":"30887:39:44"},{"expression":{"arguments":[{"id":8450,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8397,"src":"30963:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8451,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"30974:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8447,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"30944:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":8449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30950:12:44","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"30944:18:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":8452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30944:47:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8453,"nodeType":"ExpressionStatement","src":"30944:47:44"},{"eventCall":{"arguments":[{"id":8455,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8395,"src":"31040:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8456,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8423,"src":"31046:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":8457,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8397,"src":"31053:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8458,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"31064:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8454,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1424,"src":"31015:24:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":8459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31015:66:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8460,"nodeType":"EmitStatement","src":"31010:71:44"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8415,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8412,"src":"30690:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8416,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8406,"src":"30694:9:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30690:13:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8464,"initializationExpression":{"assignments":[8412],"declarations":[{"constant":false,"id":8412,"mutability":"mutable","name":"i","nameLocation":"30683:1:44","nodeType":"VariableDeclaration","scope":8464,"src":"30675:9:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8411,"name":"uint256","nodeType":"ElementaryTypeName","src":"30675:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8414,"initialValue":{"hexValue":"30","id":8413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30687:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"30675:13:44"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"30705:3:44","subExpression":{"id":8418,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8412,"src":"30707:1:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8420,"nodeType":"ExpressionStatement","src":"30705:3:44"},"nodeType":"ForStatement","src":"30670:436:44"}]},"id":8466,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"30505:24:44","nodeType":"FunctionDefinition","parameters":{"id":8398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8395,"mutability":"mutable","name":"pool","nameLocation":"30538:4:44","nodeType":"VariableDeclaration","scope":8466,"src":"30530:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8394,"name":"address","nodeType":"ElementaryTypeName","src":"30530:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8397,"mutability":"mutable","name":"recipient","nameLocation":"30552:9:44","nodeType":"VariableDeclaration","scope":8466,"src":"30544:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8396,"name":"address","nodeType":"ElementaryTypeName","src":"30544:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30529:33:44"},"returnParameters":{"id":8399,"nodeType":"ParameterList","parameters":[],"src":"30571:0:44"},"scope":8564,"src":"30496:616:44","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":8503,"nodeType":"Block","src":"31352:771:44","statements":[{"expression":{"id":8485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8476,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6940,"src":"31667:31:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8478,"indexExpression":{"id":8477,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8469,"src":"31699:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31667:37:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8480,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8471,"src":"31750:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31779:8:44","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"31750:37:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31750:39:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8483,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8473,"src":"31815:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8479,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"31707:13:44","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$6922_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31735:13:44","31803:10:44"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31707:129:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31667:169:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8486,"nodeType":"ExpressionStatement","src":"31667:169:44"},{"expression":{"arguments":[{"id":8490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8469,"src":"31971:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8492,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8469,"src":"32004:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8493,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"32010:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32026:4:44","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":6914,"src":"32010:20:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8491,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7719,"src":"31977:26:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$6916_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31977:54:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8487,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"31931:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31938:32:44","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2455,"src":"31931:39:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:101:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8497,"nodeType":"ExpressionStatement","src":"31931:101:44"},{"eventCall":{"arguments":[{"id":8499,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8469,"src":"32081:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8500,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8471,"src":"32087:28:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8498,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1359,"src":"32048:32:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32048:68:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8502,"nodeType":"EmitStatement","src":"32043:73:44"}]},"documentation":{"id":8467,"nodeType":"StructuredDocumentation","src":"31118:114:44","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":8504,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"31246:28:44","nodeType":"FunctionDefinition","parameters":{"id":8474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8469,"mutability":"mutable","name":"pool","nameLocation":"31283:4:44","nodeType":"VariableDeclaration","scope":8504,"src":"31275:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8468,"name":"address","nodeType":"ElementaryTypeName","src":"31275:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8471,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"31297:28:44","nodeType":"VariableDeclaration","scope":8504,"src":"31289:36:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8470,"name":"uint256","nodeType":"ElementaryTypeName","src":"31289:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8473,"mutability":"mutable","name":"isOverride","nameLocation":"31332:10:44","nodeType":"VariableDeclaration","scope":8504,"src":"31327:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8472,"name":"bool","nodeType":"ElementaryTypeName","src":"31327:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31274:69:44"},"returnParameters":{"id":8475,"nodeType":"ParameterList","parameters":[],"src":"31352:0:44"},"scope":8564,"src":"31237:886:44","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":8541,"nodeType":"Block","src":"32395:767:44","statements":[{"expression":{"id":8523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8514,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6945,"src":"32699:32:44","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$6922_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8516,"indexExpression":{"id":8515,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"32732:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32699:38:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8518,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"32783:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32813:8:44","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"32783:38:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32783:40:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8521,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8511,"src":"32849:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8517,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"32740:13:44","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$6922_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32768:13:44","32837:10:44"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32740:130:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"32699:171:44","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$6922_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8524,"nodeType":"ExpressionStatement","src":"32699:171:44"},{"expression":{"arguments":[{"id":8528,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"33007:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8530,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"33040:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8531,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"33046:15:44","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$6916_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33062:5:44","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":6915,"src":"33046:21:44","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$6916","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8529,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7719,"src":"33013:26:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$6916_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33013:55:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8525,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"32966:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32973:33:44","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2463,"src":"32966:40:44","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32966:103:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8535,"nodeType":"ExpressionStatement","src":"32966:103:44"},{"eventCall":{"arguments":[{"id":8537,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"33119:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8538,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"33125:29:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8536,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1366,"src":"33085:33:44","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33085:70:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8540,"nodeType":"EmitStatement","src":"33080:75:44"}]},"documentation":{"id":8505,"nodeType":"StructuredDocumentation","src":"32129:114:44","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":8542,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"32257:29:44","nodeType":"FunctionDefinition","parameters":{"id":8512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8507,"mutability":"mutable","name":"pool","nameLocation":"32304:4:44","nodeType":"VariableDeclaration","scope":8542,"src":"32296:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8506,"name":"address","nodeType":"ElementaryTypeName","src":"32296:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8509,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"32326:29:44","nodeType":"VariableDeclaration","scope":8542,"src":"32318:37:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8508,"name":"uint256","nodeType":"ElementaryTypeName","src":"32318:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8511,"mutability":"mutable","name":"isOverride","nameLocation":"32370:10:44","nodeType":"VariableDeclaration","scope":8542,"src":"32365:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8510,"name":"bool","nodeType":"ElementaryTypeName","src":"32365:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32286:100:44"},"returnParameters":{"id":8513,"nodeType":"ParameterList","parameters":[],"src":"32395:0:44"},"scope":8564,"src":"32248:914:44","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":8562,"nodeType":"Block","src":"33235:682:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8547,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8544,"src":"33770:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8548,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"33786:18:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33770:34:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8550,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33769:36:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8551,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"33808:18:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:57:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8553,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8544,"src":"33830:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:74:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8561,"nodeType":"IfStatement","src":"33765:146:44","trueBody":{"id":8560,"nodeType":"Block","src":"33845:66:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8555,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"33866:12:44","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$2976_$","typeString":"type(contract IVaultErrors)"}},"id":8557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33879:19:44","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":2824,"src":"33866:32:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33866:34:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8559,"nodeType":"RevertStatement","src":"33859:41:44"}]}}]},"id":8563,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"33177:21:44","nodeType":"FunctionDefinition","parameters":{"id":8545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8544,"mutability":"mutable","name":"feePercentage","nameLocation":"33207:13:44","nodeType":"VariableDeclaration","scope":8563,"src":"33199:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8543,"name":"uint256","nodeType":"ElementaryTypeName","src":"33199:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33198:23:44"},"returnParameters":{"id":8546,"nodeType":"ParameterList","parameters":[],"src":"33235:0:44"},"scope":8564,"src":"33168:749:44","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":8565,"src":"3120:30799:44","usedErrors":[72,1454,1457,1462,1469,1472,2824,2848,4630,6290,6689,6976,6979,9711,9992,9997,10000,10281],"usedEvents":[1347,1352,1359,1366,1373,1380,1390,1400,1412,1424,1433,1442,1451]}],"src":"46:33874:44"},"id":44},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[6869],"IAuthorizer":[1009],"IVault":[2319],"SingletonAuthentication":[8623]},"id":8624,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":8566,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:45"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":8568,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":1010,"src":"72:91:45","symbolAliases":[{"foreign":{"id":8567,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1009,"src":"81:11:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":8570,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":2320,"src":"164:81:45","symbolAliases":[{"foreign":{"id":8569,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"173:6:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"./CommonAuthentication.sol","id":8572,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8624,"sourceUnit":6870,"src":"247:66:45","symbolAliases":[{"foreign":{"id":8571,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6869,"src":"256:20:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":8574,"name":"CommonAuthentication","nameLocations":["735:20:45"],"nodeType":"IdentifierPath","referencedDeclaration":6869,"src":"735:20:45"},"id":8575,"nodeType":"InheritanceSpecifier","src":"735:20:45"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":8573,"nodeType":"StructuredDocumentation","src":"315:374:45","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":8623,"linearizedBaseContracts":[8623,6869,4159,81],"name":"SingletonAuthentication","nameLocation":"708:23:45","nodeType":"ContractDefinition","nodes":[{"body":{"id":8597,"nodeType":"Block","src":"932:64:45","statements":[]},"id":8598,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8581,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8578,"src":"883:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":8590,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"922:4:45","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$8623","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$8623","typeString":"contract SingletonAuthentication"}],"id":8589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"914:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8588,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:45","typeDescriptions":{}}},"id":8591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"914:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"906:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":8586,"name":"uint160","nodeType":"ElementaryTypeName","src":"906:7:45","typeDescriptions":{}}},"id":8592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:22:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":8585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"898:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8584,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:45","typeDescriptions":{}}},"id":8593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"898:31:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"890:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":8582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"890:7:45","typeDescriptions":{}}},"id":8594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:40:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":8595,"kind":"baseConstructorSpecifier","modifierName":{"id":8580,"name":"CommonAuthentication","nameLocations":["862:20:45"],"nodeType":"IdentifierPath","referencedDeclaration":6869,"src":"862:20:45"},"nodeType":"ModifierInvocation","src":"862:69:45"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8578,"mutability":"mutable","name":"vault","nameLocation":"855:5:45","nodeType":"VariableDeclaration","scope":8598,"src":"848:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":8577,"nodeType":"UserDefinedTypeName","pathNode":{"id":8576,"name":"IVault","nameLocations":["848:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"848:6:45"},"referencedDeclaration":2319,"src":"848:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"847:14:45"},"returnParameters":{"id":8596,"nodeType":"ParameterList","parameters":[],"src":"932:0:45"},"scope":8623,"src":"836:160:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8608,"nodeType":"Block","src":"1176:35:45","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8605,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6751,"src":"1193:9:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":8606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1193:11:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"functionReturnParameters":8604,"id":8607,"nodeType":"Return","src":"1186:18:45"}]},"documentation":{"id":8599,"nodeType":"StructuredDocumentation","src":"1002:120:45","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":8609,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1136:8:45","nodeType":"FunctionDefinition","parameters":{"id":8600,"nodeType":"ParameterList","parameters":[],"src":"1144:2:45"},"returnParameters":{"id":8604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8603,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8609,"src":"1168:6:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":8602,"nodeType":"UserDefinedTypeName","pathNode":{"id":8601,"name":"IVault","nameLocations":["1168:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1168:6:45"},"referencedDeclaration":2319,"src":"1168:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1167:8:45"},"scope":8623,"src":"1127:84:45","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":8621,"nodeType":"Block","src":"1407:50:45","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8616,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"1424:8:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":8617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1424:10:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:13:45","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3633,"src":"1424:24:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1009_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":8619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1424:26:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"functionReturnParameters":8615,"id":8620,"nodeType":"Return","src":"1417:33:45"}]},"documentation":{"id":8610,"nodeType":"StructuredDocumentation","src":"1217:126:45","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":8622,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1357:13:45","nodeType":"FunctionDefinition","parameters":{"id":8611,"nodeType":"ParameterList","parameters":[],"src":"1370:2:45"},"returnParameters":{"id":8615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8622,"src":"1394:11:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"},"typeName":{"id":8613,"nodeType":"UserDefinedTypeName","pathNode":{"id":8612,"name":"IAuthorizer","nameLocations":["1394:11:45"],"nodeType":"IdentifierPath","referencedDeclaration":1009,"src":"1394:11:45"},"referencedDeclaration":1009,"src":"1394:11:45","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1393:13:45"},"scope":8623,"src":"1348:109:45","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":8624,"src":"690:769:45","usedErrors":[72,6689],"usedEvents":[]}],"src":"46:1414:45"},"id":45},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[2319],"IVaultErrors":[2976],"VaultGuard":[8672]},"id":8673,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":8625,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:46"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":8627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8673,"sourceUnit":2977,"src":"72:93:46","symbolAliases":[{"foreign":{"id":8626,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"81:12:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":8629,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8673,"sourceUnit":2320,"src":"166:81:46","symbolAliases":[{"foreign":{"id":8628,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"175:6:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":8630,"nodeType":"StructuredDocumentation","src":"249:59:46","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":8672,"linearizedBaseContracts":[8672],"name":"VaultGuard","nameLocation":"317:10:46","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8633,"mutability":"immutable","name":"_vault","nameLocation":"360:6:46","nodeType":"VariableDeclaration","scope":8672,"src":"334:32:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":8632,"nodeType":"UserDefinedTypeName","pathNode":{"id":8631,"name":"IVault","nameLocations":["334:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"334:6:46"},"referencedDeclaration":2319,"src":"334:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":8643,"nodeType":"Block","src":"399:31:46","statements":[{"expression":{"id":8641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8639,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"409:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8640,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"418:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"src":"409:14:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":8642,"nodeType":"ExpressionStatement","src":"409:14:46"}]},"id":8644,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8636,"mutability":"mutable","name":"vault","nameLocation":"392:5:46","nodeType":"VariableDeclaration","scope":8644,"src":"385:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":8635,"nodeType":"UserDefinedTypeName","pathNode":{"id":8634,"name":"IVault","nameLocations":["385:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"385:6:46"},"referencedDeclaration":2319,"src":"385:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:46"},"returnParameters":{"id":8638,"nodeType":"ParameterList","parameters":[],"src":"399:0:46"},"scope":8672,"src":"373:57:46","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8650,"nodeType":"Block","src":"457:46:46","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8646,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8671,"src":"467:16:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":8647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8648,"nodeType":"ExpressionStatement","src":"467:18:46"},{"id":8649,"nodeType":"PlaceholderStatement","src":"495:1:46"}]},"id":8651,"name":"onlyVault","nameLocation":"445:9:46","nodeType":"ModifierDefinition","parameters":{"id":8645,"nodeType":"ParameterList","parameters":[],"src":"454:2:46"},"src":"436:67:46","virtual":false,"visibility":"internal"},{"body":{"id":8670,"nodeType":"Block","src":"550:124:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8654,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:46","memberName":"sender","nodeType":"MemberAccess","src":"564:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":8658,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"586:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}],"id":8657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8656,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:46","typeDescriptions":{}}},"id":8659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8669,"nodeType":"IfStatement","src":"560:108:46","trueBody":{"id":8668,"nodeType":"Block","src":"595:73:46","statements":[{"errorCall":{"arguments":[{"expression":{"id":8664,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:46","memberName":"sender","nodeType":"MemberAccess","src":"646:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8661,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"616:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$2976_$","typeString":"type(contract IVaultErrors)"}},"id":8663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:46","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":2848,"src":"616:29:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8667,"nodeType":"RevertStatement","src":"609:48:46"}]}}]},"id":8671,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:46","nodeType":"FunctionDefinition","parameters":{"id":8652,"nodeType":"ParameterList","parameters":[],"src":"534:2:46"},"returnParameters":{"id":8653,"nodeType":"ParameterList","parameters":[],"src":"550:0:46"},"scope":8672,"src":"509:165:46","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":8673,"src":"308:368:46","usedErrors":[],"usedEvents":[]}],"src":"46:631:46"},"id":46},"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol":{"ast":{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","exportedSymbols":{"AggregatorV3Interface":[8718]},"id":8719,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8674,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:47"},{"abstract":false,"baseContracts":[],"canonicalName":"AggregatorV3Interface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":8718,"linearizedBaseContracts":[8718],"name":"AggregatorV3Interface","nameLocation":"120:21:47","nodeType":"ContractDefinition","nodes":[{"functionSelector":"313ce567","id":8679,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"155:8:47","nodeType":"FunctionDefinition","parameters":{"id":8675,"nodeType":"ParameterList","parameters":[],"src":"163:2:47"},"returnParameters":{"id":8678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8679,"src":"189:5:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8676,"name":"uint8","nodeType":"ElementaryTypeName","src":"189:5:47","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"188:7:47"},"scope":8718,"src":"146:50:47","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7284e416","id":8684,"implemented":false,"kind":"function","modifiers":[],"name":"description","nameLocation":"209:11:47","nodeType":"FunctionDefinition","parameters":{"id":8680,"nodeType":"ParameterList","parameters":[],"src":"220:2:47"},"returnParameters":{"id":8683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8684,"src":"246:13:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8681,"name":"string","nodeType":"ElementaryTypeName","src":"246:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"245:15:47"},"scope":8718,"src":"200:61:47","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"54fd4d50","id":8689,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"274:7:47","nodeType":"FunctionDefinition","parameters":{"id":8685,"nodeType":"ParameterList","parameters":[],"src":"281:2:47"},"returnParameters":{"id":8688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8687,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8689,"src":"307:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8686,"name":"uint256","nodeType":"ElementaryTypeName","src":"307:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"306:9:47"},"scope":8718,"src":"265:51:47","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9a6fc8f5","id":8704,"implemented":false,"kind":"function","modifiers":[],"name":"getRoundData","nameLocation":"329:12:47","nodeType":"FunctionDefinition","parameters":{"id":8692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8691,"mutability":"mutable","name":"_roundId","nameLocation":"354:8:47","nodeType":"VariableDeclaration","scope":8704,"src":"347:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8690,"name":"uint80","nodeType":"ElementaryTypeName","src":"347:6:47","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"341:25:47"},"returnParameters":{"id":8703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8694,"mutability":"mutable","name":"roundId","nameLocation":"397:7:47","nodeType":"VariableDeclaration","scope":8704,"src":"390:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8693,"name":"uint80","nodeType":"ElementaryTypeName","src":"390:6:47","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":8696,"mutability":"mutable","name":"answer","nameLocation":"413:6:47","nodeType":"VariableDeclaration","scope":8704,"src":"406:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8695,"name":"int256","nodeType":"ElementaryTypeName","src":"406:6:47","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":8698,"mutability":"mutable","name":"startedAt","nameLocation":"429:9:47","nodeType":"VariableDeclaration","scope":8704,"src":"421:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8697,"name":"uint256","nodeType":"ElementaryTypeName","src":"421:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8700,"mutability":"mutable","name":"updatedAt","nameLocation":"448:9:47","nodeType":"VariableDeclaration","scope":8704,"src":"440:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8699,"name":"uint256","nodeType":"ElementaryTypeName","src":"440:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8702,"mutability":"mutable","name":"answeredInRound","nameLocation":"466:15:47","nodeType":"VariableDeclaration","scope":8704,"src":"459:22:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8701,"name":"uint80","nodeType":"ElementaryTypeName","src":"459:6:47","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"389:93:47"},"scope":8718,"src":"320:163:47","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"feaf968c","id":8717,"implemented":false,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"496:15:47","nodeType":"FunctionDefinition","parameters":{"id":8705,"nodeType":"ParameterList","parameters":[],"src":"511:2:47"},"returnParameters":{"id":8716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8707,"mutability":"mutable","name":"roundId","nameLocation":"556:7:47","nodeType":"VariableDeclaration","scope":8717,"src":"549:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8706,"name":"uint80","nodeType":"ElementaryTypeName","src":"549:6:47","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":8709,"mutability":"mutable","name":"answer","nameLocation":"572:6:47","nodeType":"VariableDeclaration","scope":8717,"src":"565:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8708,"name":"int256","nodeType":"ElementaryTypeName","src":"565:6:47","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":8711,"mutability":"mutable","name":"startedAt","nameLocation":"588:9:47","nodeType":"VariableDeclaration","scope":8717,"src":"580:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8710,"name":"uint256","nodeType":"ElementaryTypeName","src":"580:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8713,"mutability":"mutable","name":"updatedAt","nameLocation":"607:9:47","nodeType":"VariableDeclaration","scope":8717,"src":"599:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8712,"name":"uint256","nodeType":"ElementaryTypeName","src":"599:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8715,"mutability":"mutable","name":"answeredInRound","nameLocation":"625:15:47","nodeType":"VariableDeclaration","scope":8717,"src":"618:22:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8714,"name":"uint80","nodeType":"ElementaryTypeName","src":"618:6:47","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"548:93:47"},"scope":8718,"src":"487:155:47","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":8719,"src":"110:534:47","usedErrors":[],"usedEvents":[]}],"src":"32:613:47"},"id":47},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","exportedSymbols":{"IERC1271":[8732]},"id":8733,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8720,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:48"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1271","contractDependencies":[],"contractKind":"interface","documentation":{"id":8721,"nodeType":"StructuredDocumentation","src":"133:159:48","text":" @dev Interface of the ERC1271 standard signature validation method for\n contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]."},"fullyImplemented":false,"id":8732,"linearizedBaseContracts":[8732],"name":"IERC1271","nameLocation":"303:8:48","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8722,"nodeType":"StructuredDocumentation","src":"318:220:48","text":" @dev Should return whether the signature provided is valid for the provided data\n @param hash Hash of the data to be signed\n @param signature Signature byte array associated with _data"},"functionSelector":"1626ba7e","id":8731,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"552:16:48","nodeType":"FunctionDefinition","parameters":{"id":8727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8724,"mutability":"mutable","name":"hash","nameLocation":"577:4:48","nodeType":"VariableDeclaration","scope":8731,"src":"569:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8723,"name":"bytes32","nodeType":"ElementaryTypeName","src":"569:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8726,"mutability":"mutable","name":"signature","nameLocation":"596:9:48","nodeType":"VariableDeclaration","scope":8731,"src":"583:22:48","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8725,"name":"bytes","nodeType":"ElementaryTypeName","src":"583:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"568:38:48"},"returnParameters":{"id":8730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8729,"mutability":"mutable","name":"magicValue","nameLocation":"637:10:48","nodeType":"VariableDeclaration","scope":8731,"src":"630:17:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":8728,"name":"bytes4","nodeType":"ElementaryTypeName","src":"630:6:48","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"629:19:48"},"scope":8732,"src":"543:106:48","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":8733,"src":"293:358:48","usedErrors":[],"usedEvents":[]}],"src":"107:545:48"},"id":48},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[9632],"IERC20Metadata":[9658],"IERC4626":[8902]},"id":8903,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8734,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:49"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":8736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8903,"sourceUnit":9633,"src":"133:49:49","symbolAliases":[{"foreign":{"id":8735,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"141:6:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":8738,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8903,"sourceUnit":9659,"src":"183:76:49","symbolAliases":[{"foreign":{"id":8737,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9658,"src":"191:14:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8740,"name":"IERC20","nameLocations":["420:6:49"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"420:6:49"},"id":8741,"nodeType":"InheritanceSpecifier","src":"420:6:49"},{"baseName":{"id":8742,"name":"IERC20Metadata","nameLocations":["428:14:49"],"nodeType":"IdentifierPath","referencedDeclaration":9658,"src":"428:14:49"},"id":8743,"nodeType":"InheritanceSpecifier","src":"428:14:49"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":8739,"nodeType":"StructuredDocumentation","src":"261:136:49","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":8902,"linearizedBaseContracts":[8902,9658,9632],"name":"IERC4626","nameLocation":"408:8:49","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":8753,"name":"Deposit","nameLocation":"455:7:49","nodeType":"EventDefinition","parameters":{"id":8752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8745,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:49","nodeType":"VariableDeclaration","scope":8753,"src":"463:22:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8744,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8747,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:49","nodeType":"VariableDeclaration","scope":8753,"src":"487:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8746,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8749,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:49","nodeType":"VariableDeclaration","scope":8753,"src":"510:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8748,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8751,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:49","nodeType":"VariableDeclaration","scope":8753,"src":"526:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8750,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:49"},"src":"449:93:49"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":8765,"name":"Withdraw","nameLocation":"554:8:49","nodeType":"EventDefinition","parameters":{"id":8764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8755,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:49","nodeType":"VariableDeclaration","scope":8765,"src":"572:22:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8754,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8757,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:49","nodeType":"VariableDeclaration","scope":8765,"src":"604:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8756,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8759,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:49","nodeType":"VariableDeclaration","scope":8765,"src":"638:21:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8758,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8761,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:49","nodeType":"VariableDeclaration","scope":8765,"src":"669:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8760,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8763,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:49","nodeType":"VariableDeclaration","scope":8765,"src":"693:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8762,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:49"},"src":"548:166:49"},{"documentation":{"id":8766,"nodeType":"StructuredDocumentation","src":"720:207:49","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":8771,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:49","nodeType":"FunctionDefinition","parameters":{"id":8767,"nodeType":"ParameterList","parameters":[],"src":"946:2:49"},"returnParameters":{"id":8770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8769,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:49","nodeType":"VariableDeclaration","scope":8771,"src":"972:25:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8768,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:49"},"scope":8902,"src":"932:67:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8772,"nodeType":"StructuredDocumentation","src":"1005:286:49","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":8777,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:49","nodeType":"FunctionDefinition","parameters":{"id":8773,"nodeType":"ParameterList","parameters":[],"src":"1316:2:49"},"returnParameters":{"id":8776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8775,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:49","nodeType":"VariableDeclaration","scope":8777,"src":"1342:26:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8774,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:49"},"scope":8902,"src":"1296:74:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8778,"nodeType":"StructuredDocumentation","src":"1376:720:49","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":8785,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:49","nodeType":"FunctionDefinition","parameters":{"id":8781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8780,"mutability":"mutable","name":"assets","nameLocation":"2134:6:49","nodeType":"VariableDeclaration","scope":8785,"src":"2126:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8779,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:49"},"returnParameters":{"id":8784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8783,"mutability":"mutable","name":"shares","nameLocation":"2173:6:49","nodeType":"VariableDeclaration","scope":8785,"src":"2165:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8782,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:49"},"scope":8902,"src":"2101:80:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8786,"nodeType":"StructuredDocumentation","src":"2187:720:49","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":8793,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:49","nodeType":"FunctionDefinition","parameters":{"id":8789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8788,"mutability":"mutable","name":"shares","nameLocation":"2945:6:49","nodeType":"VariableDeclaration","scope":8793,"src":"2937:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8787,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:49"},"returnParameters":{"id":8792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8791,"mutability":"mutable","name":"assets","nameLocation":"2984:6:49","nodeType":"VariableDeclaration","scope":8793,"src":"2976:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8790,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:49"},"scope":8902,"src":"2912:80:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8794,"nodeType":"StructuredDocumentation","src":"2998:386:49","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":8801,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:49","nodeType":"FunctionDefinition","parameters":{"id":8797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8796,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:49","nodeType":"VariableDeclaration","scope":8801,"src":"3409:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8795,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:49"},"returnParameters":{"id":8800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8799,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:49","nodeType":"VariableDeclaration","scope":8801,"src":"3450:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8798,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:49"},"scope":8902,"src":"3389:80:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8802,"nodeType":"StructuredDocumentation","src":"3475:1012:49","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":8809,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:49","nodeType":"FunctionDefinition","parameters":{"id":8805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8804,"mutability":"mutable","name":"assets","nameLocation":"4524:6:49","nodeType":"VariableDeclaration","scope":8809,"src":"4516:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8803,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:49"},"returnParameters":{"id":8808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8807,"mutability":"mutable","name":"shares","nameLocation":"4563:6:49","nodeType":"VariableDeclaration","scope":8809,"src":"4555:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8806,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:49"},"scope":8902,"src":"4492:79:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8810,"nodeType":"StructuredDocumentation","src":"4577:651:49","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":8819,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:49","nodeType":"FunctionDefinition","parameters":{"id":8815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8812,"mutability":"mutable","name":"assets","nameLocation":"5258:6:49","nodeType":"VariableDeclaration","scope":8819,"src":"5250:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8811,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8814,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:49","nodeType":"VariableDeclaration","scope":8819,"src":"5266:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8813,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:49"},"returnParameters":{"id":8818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8817,"mutability":"mutable","name":"shares","nameLocation":"5310:6:49","nodeType":"VariableDeclaration","scope":8819,"src":"5302:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8816,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:49"},"scope":8902,"src":"5233:85:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":8820,"nodeType":"StructuredDocumentation","src":"5324:341:49","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":8827,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:49","nodeType":"FunctionDefinition","parameters":{"id":8823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8822,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:49","nodeType":"VariableDeclaration","scope":8827,"src":"5687:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8821,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:49"},"returnParameters":{"id":8826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8825,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:49","nodeType":"VariableDeclaration","scope":8827,"src":"5728:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8824,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:49"},"scope":8902,"src":"5670:77:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8828,"nodeType":"StructuredDocumentation","src":"5753:984:49","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":8835,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:49","nodeType":"FunctionDefinition","parameters":{"id":8831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8830,"mutability":"mutable","name":"shares","nameLocation":"6771:6:49","nodeType":"VariableDeclaration","scope":8835,"src":"6763:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8829,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:49"},"returnParameters":{"id":8834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8833,"mutability":"mutable","name":"assets","nameLocation":"6810:6:49","nodeType":"VariableDeclaration","scope":8835,"src":"6802:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8832,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:49"},"scope":8902,"src":"6742:76:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8836,"nodeType":"StructuredDocumentation","src":"6824:642:49","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":8845,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:49","nodeType":"FunctionDefinition","parameters":{"id":8841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8838,"mutability":"mutable","name":"shares","nameLocation":"7493:6:49","nodeType":"VariableDeclaration","scope":8845,"src":"7485:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8837,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8840,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:49","nodeType":"VariableDeclaration","scope":8845,"src":"7501:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8839,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:49"},"returnParameters":{"id":8844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8843,"mutability":"mutable","name":"assets","nameLocation":"7545:6:49","nodeType":"VariableDeclaration","scope":8845,"src":"7537:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8842,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:49"},"scope":8902,"src":"7471:82:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":8846,"nodeType":"StructuredDocumentation","src":"7559:293:49","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":8853,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:49","nodeType":"FunctionDefinition","parameters":{"id":8849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8848,"mutability":"mutable","name":"owner","nameLocation":"7886:5:49","nodeType":"VariableDeclaration","scope":8853,"src":"7878:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8847,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:49"},"returnParameters":{"id":8852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8851,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:49","nodeType":"VariableDeclaration","scope":8853,"src":"7916:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8850,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:49"},"scope":8902,"src":"7857:78:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8854,"nodeType":"StructuredDocumentation","src":"7941:1034:49","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":8861,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:49","nodeType":"FunctionDefinition","parameters":{"id":8857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8856,"mutability":"mutable","name":"assets","nameLocation":"9013:6:49","nodeType":"VariableDeclaration","scope":8861,"src":"9005:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8855,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:49"},"returnParameters":{"id":8860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8859,"mutability":"mutable","name":"shares","nameLocation":"9052:6:49","nodeType":"VariableDeclaration","scope":8861,"src":"9044:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8858,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:49"},"scope":8902,"src":"8980:80:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8862,"nodeType":"StructuredDocumentation","src":"9066:670:49","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":8873,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:49","nodeType":"FunctionDefinition","parameters":{"id":8869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8864,"mutability":"mutable","name":"assets","nameLocation":"9767:6:49","nodeType":"VariableDeclaration","scope":8873,"src":"9759:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8863,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8866,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:49","nodeType":"VariableDeclaration","scope":8873,"src":"9775:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8865,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8868,"mutability":"mutable","name":"owner","nameLocation":"9801:5:49","nodeType":"VariableDeclaration","scope":8873,"src":"9793:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8867,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:49"},"returnParameters":{"id":8872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8871,"mutability":"mutable","name":"shares","nameLocation":"9834:6:49","nodeType":"VariableDeclaration","scope":8873,"src":"9826:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8870,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:49"},"scope":8902,"src":"9741:101:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":8874,"nodeType":"StructuredDocumentation","src":"9848:381:49","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":8881,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:49","nodeType":"FunctionDefinition","parameters":{"id":8877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8876,"mutability":"mutable","name":"owner","nameLocation":"10261:5:49","nodeType":"VariableDeclaration","scope":8881,"src":"10253:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8875,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:49"},"returnParameters":{"id":8880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8879,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:49","nodeType":"VariableDeclaration","scope":8881,"src":"10291:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8878,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:49"},"scope":8902,"src":"10234:76:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8882,"nodeType":"StructuredDocumentation","src":"10316:1010:49","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":8889,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:49","nodeType":"FunctionDefinition","parameters":{"id":8885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8884,"mutability":"mutable","name":"shares","nameLocation":"11362:6:49","nodeType":"VariableDeclaration","scope":8889,"src":"11354:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8883,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:49"},"returnParameters":{"id":8888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8887,"mutability":"mutable","name":"assets","nameLocation":"11401:6:49","nodeType":"VariableDeclaration","scope":8889,"src":"11393:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8886,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:49"},"scope":8902,"src":"11331:78:49","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":8890,"nodeType":"StructuredDocumentation","src":"11415:661:49","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":8901,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:49","nodeType":"FunctionDefinition","parameters":{"id":8897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8892,"mutability":"mutable","name":"shares","nameLocation":"12105:6:49","nodeType":"VariableDeclaration","scope":8901,"src":"12097:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8891,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8894,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:49","nodeType":"VariableDeclaration","scope":8901,"src":"12113:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8893,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8896,"mutability":"mutable","name":"owner","nameLocation":"12139:5:49","nodeType":"VariableDeclaration","scope":8901,"src":"12131:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8895,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:49"},"returnParameters":{"id":8900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8899,"mutability":"mutable","name":"assets","nameLocation":"12172:6:49","nodeType":"VariableDeclaration","scope":8901,"src":"12164:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8898,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:49"},"scope":8902,"src":"12081:99:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":8903,"src":"398:11784:49","usedErrors":[],"usedEvents":[8753,8765,9566,9575]}],"src":"107:12076:49"},"id":49},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[9039],"IERC20Errors":[8944],"IERC721Errors":[8992]},"id":9040,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8904,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:50"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":8905,"nodeType":"StructuredDocumentation","src":"138:139:50","text":" @dev Standard ERC20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens."},"fullyImplemented":true,"id":8944,"linearizedBaseContracts":[8944],"name":"IERC20Errors","nameLocation":"288:12:50","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8906,"nodeType":"StructuredDocumentation","src":"307:309:50","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":8914,"name":"ERC20InsufficientBalance","nameLocation":"627:24:50","nodeType":"ErrorDefinition","parameters":{"id":8913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8908,"mutability":"mutable","name":"sender","nameLocation":"660:6:50","nodeType":"VariableDeclaration","scope":8914,"src":"652:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8907,"name":"address","nodeType":"ElementaryTypeName","src":"652:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8910,"mutability":"mutable","name":"balance","nameLocation":"676:7:50","nodeType":"VariableDeclaration","scope":8914,"src":"668:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8909,"name":"uint256","nodeType":"ElementaryTypeName","src":"668:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8912,"mutability":"mutable","name":"needed","nameLocation":"693:6:50","nodeType":"VariableDeclaration","scope":8914,"src":"685:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8911,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"651:49:50"},"src":"621:80:50"},{"documentation":{"id":8915,"nodeType":"StructuredDocumentation","src":"707:152:50","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":8919,"name":"ERC20InvalidSender","nameLocation":"870:18:50","nodeType":"ErrorDefinition","parameters":{"id":8918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8917,"mutability":"mutable","name":"sender","nameLocation":"897:6:50","nodeType":"VariableDeclaration","scope":8919,"src":"889:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8916,"name":"address","nodeType":"ElementaryTypeName","src":"889:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"888:16:50"},"src":"864:41:50"},{"documentation":{"id":8920,"nodeType":"StructuredDocumentation","src":"911:159:50","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":8924,"name":"ERC20InvalidReceiver","nameLocation":"1081:20:50","nodeType":"ErrorDefinition","parameters":{"id":8923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8922,"mutability":"mutable","name":"receiver","nameLocation":"1110:8:50","nodeType":"VariableDeclaration","scope":8924,"src":"1102:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8921,"name":"address","nodeType":"ElementaryTypeName","src":"1102:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1101:18:50"},"src":"1075:45:50"},{"documentation":{"id":8925,"nodeType":"StructuredDocumentation","src":"1126:345:50","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":8933,"name":"ERC20InsufficientAllowance","nameLocation":"1482:26:50","nodeType":"ErrorDefinition","parameters":{"id":8932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8927,"mutability":"mutable","name":"spender","nameLocation":"1517:7:50","nodeType":"VariableDeclaration","scope":8933,"src":"1509:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8926,"name":"address","nodeType":"ElementaryTypeName","src":"1509:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8929,"mutability":"mutable","name":"allowance","nameLocation":"1534:9:50","nodeType":"VariableDeclaration","scope":8933,"src":"1526:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8928,"name":"uint256","nodeType":"ElementaryTypeName","src":"1526:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8931,"mutability":"mutable","name":"needed","nameLocation":"1553:6:50","nodeType":"VariableDeclaration","scope":8933,"src":"1545:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8930,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1508:52:50"},"src":"1476:85:50"},{"documentation":{"id":8934,"nodeType":"StructuredDocumentation","src":"1567:174:50","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":8938,"name":"ERC20InvalidApprover","nameLocation":"1752:20:50","nodeType":"ErrorDefinition","parameters":{"id":8937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8936,"mutability":"mutable","name":"approver","nameLocation":"1781:8:50","nodeType":"VariableDeclaration","scope":8938,"src":"1773:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8935,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:18:50"},"src":"1746:45:50"},{"documentation":{"id":8939,"nodeType":"StructuredDocumentation","src":"1797:195:50","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":8943,"name":"ERC20InvalidSpender","nameLocation":"2003:19:50","nodeType":"ErrorDefinition","parameters":{"id":8942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8941,"mutability":"mutable","name":"spender","nameLocation":"2031:7:50","nodeType":"VariableDeclaration","scope":8943,"src":"2023:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8940,"name":"address","nodeType":"ElementaryTypeName","src":"2023:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2022:17:50"},"src":"1997:43:50"}],"scope":9040,"src":"278:1764:50","usedErrors":[8914,8919,8924,8933,8938,8943],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":8945,"nodeType":"StructuredDocumentation","src":"2044:141:50","text":" @dev Standard ERC721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens."},"fullyImplemented":true,"id":8992,"linearizedBaseContracts":[8992],"name":"IERC721Errors","nameLocation":"2196:13:50","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8946,"nodeType":"StructuredDocumentation","src":"2216:219:50","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":8950,"name":"ERC721InvalidOwner","nameLocation":"2446:18:50","nodeType":"ErrorDefinition","parameters":{"id":8949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8948,"mutability":"mutable","name":"owner","nameLocation":"2473:5:50","nodeType":"VariableDeclaration","scope":8950,"src":"2465:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8947,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2464:15:50"},"src":"2440:40:50"},{"documentation":{"id":8951,"nodeType":"StructuredDocumentation","src":"2486:132:50","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":8955,"name":"ERC721NonexistentToken","nameLocation":"2629:22:50","nodeType":"ErrorDefinition","parameters":{"id":8954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8953,"mutability":"mutable","name":"tokenId","nameLocation":"2660:7:50","nodeType":"VariableDeclaration","scope":8955,"src":"2652:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8952,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2651:17:50"},"src":"2623:46:50"},{"documentation":{"id":8956,"nodeType":"StructuredDocumentation","src":"2675:289:50","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":8964,"name":"ERC721IncorrectOwner","nameLocation":"2975:20:50","nodeType":"ErrorDefinition","parameters":{"id":8963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8958,"mutability":"mutable","name":"sender","nameLocation":"3004:6:50","nodeType":"VariableDeclaration","scope":8964,"src":"2996:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8957,"name":"address","nodeType":"ElementaryTypeName","src":"2996:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8960,"mutability":"mutable","name":"tokenId","nameLocation":"3020:7:50","nodeType":"VariableDeclaration","scope":8964,"src":"3012:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8959,"name":"uint256","nodeType":"ElementaryTypeName","src":"3012:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8962,"mutability":"mutable","name":"owner","nameLocation":"3037:5:50","nodeType":"VariableDeclaration","scope":8964,"src":"3029:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8961,"name":"address","nodeType":"ElementaryTypeName","src":"3029:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2995:48:50"},"src":"2969:75:50"},{"documentation":{"id":8965,"nodeType":"StructuredDocumentation","src":"3050:152:50","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":8969,"name":"ERC721InvalidSender","nameLocation":"3213:19:50","nodeType":"ErrorDefinition","parameters":{"id":8968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8967,"mutability":"mutable","name":"sender","nameLocation":"3241:6:50","nodeType":"VariableDeclaration","scope":8969,"src":"3233:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8966,"name":"address","nodeType":"ElementaryTypeName","src":"3233:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3232:16:50"},"src":"3207:42:50"},{"documentation":{"id":8970,"nodeType":"StructuredDocumentation","src":"3255:159:50","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":8974,"name":"ERC721InvalidReceiver","nameLocation":"3425:21:50","nodeType":"ErrorDefinition","parameters":{"id":8973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8972,"mutability":"mutable","name":"receiver","nameLocation":"3455:8:50","nodeType":"VariableDeclaration","scope":8974,"src":"3447:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8971,"name":"address","nodeType":"ElementaryTypeName","src":"3447:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3446:18:50"},"src":"3419:46:50"},{"documentation":{"id":8975,"nodeType":"StructuredDocumentation","src":"3471:247:50","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":8981,"name":"ERC721InsufficientApproval","nameLocation":"3729:26:50","nodeType":"ErrorDefinition","parameters":{"id":8980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8977,"mutability":"mutable","name":"operator","nameLocation":"3764:8:50","nodeType":"VariableDeclaration","scope":8981,"src":"3756:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8976,"name":"address","nodeType":"ElementaryTypeName","src":"3756:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8979,"mutability":"mutable","name":"tokenId","nameLocation":"3782:7:50","nodeType":"VariableDeclaration","scope":8981,"src":"3774:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8978,"name":"uint256","nodeType":"ElementaryTypeName","src":"3774:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3755:35:50"},"src":"3723:68:50"},{"documentation":{"id":8982,"nodeType":"StructuredDocumentation","src":"3797:174:50","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":8986,"name":"ERC721InvalidApprover","nameLocation":"3982:21:50","nodeType":"ErrorDefinition","parameters":{"id":8985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8984,"mutability":"mutable","name":"approver","nameLocation":"4012:8:50","nodeType":"VariableDeclaration","scope":8986,"src":"4004:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8983,"name":"address","nodeType":"ElementaryTypeName","src":"4004:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4003:18:50"},"src":"3976:46:50"},{"documentation":{"id":8987,"nodeType":"StructuredDocumentation","src":"4028:197:50","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":8991,"name":"ERC721InvalidOperator","nameLocation":"4236:21:50","nodeType":"ErrorDefinition","parameters":{"id":8990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8989,"mutability":"mutable","name":"operator","nameLocation":"4266:8:50","nodeType":"VariableDeclaration","scope":8991,"src":"4258:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8988,"name":"address","nodeType":"ElementaryTypeName","src":"4258:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4257:18:50"},"src":"4230:46:50"}],"scope":9040,"src":"2186:2092:50","usedErrors":[8950,8955,8964,8969,8974,8981,8986,8991],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":8993,"nodeType":"StructuredDocumentation","src":"4280:143:50","text":" @dev Standard ERC1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens."},"fullyImplemented":true,"id":9039,"linearizedBaseContracts":[9039],"name":"IERC1155Errors","nameLocation":"4434:14:50","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8994,"nodeType":"StructuredDocumentation","src":"4455:361:50","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":9004,"name":"ERC1155InsufficientBalance","nameLocation":"4827:26:50","nodeType":"ErrorDefinition","parameters":{"id":9003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8996,"mutability":"mutable","name":"sender","nameLocation":"4862:6:50","nodeType":"VariableDeclaration","scope":9004,"src":"4854:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8995,"name":"address","nodeType":"ElementaryTypeName","src":"4854:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8998,"mutability":"mutable","name":"balance","nameLocation":"4878:7:50","nodeType":"VariableDeclaration","scope":9004,"src":"4870:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8997,"name":"uint256","nodeType":"ElementaryTypeName","src":"4870:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9000,"mutability":"mutable","name":"needed","nameLocation":"4895:6:50","nodeType":"VariableDeclaration","scope":9004,"src":"4887:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8999,"name":"uint256","nodeType":"ElementaryTypeName","src":"4887:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9002,"mutability":"mutable","name":"tokenId","nameLocation":"4911:7:50","nodeType":"VariableDeclaration","scope":9004,"src":"4903:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9001,"name":"uint256","nodeType":"ElementaryTypeName","src":"4903:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4853:66:50"},"src":"4821:99:50"},{"documentation":{"id":9005,"nodeType":"StructuredDocumentation","src":"4926:152:50","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":9009,"name":"ERC1155InvalidSender","nameLocation":"5089:20:50","nodeType":"ErrorDefinition","parameters":{"id":9008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9007,"mutability":"mutable","name":"sender","nameLocation":"5118:6:50","nodeType":"VariableDeclaration","scope":9009,"src":"5110:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9006,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5109:16:50"},"src":"5083:43:50"},{"documentation":{"id":9010,"nodeType":"StructuredDocumentation","src":"5132:159:50","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":9014,"name":"ERC1155InvalidReceiver","nameLocation":"5302:22:50","nodeType":"ErrorDefinition","parameters":{"id":9013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9012,"mutability":"mutable","name":"receiver","nameLocation":"5333:8:50","nodeType":"VariableDeclaration","scope":9014,"src":"5325:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9011,"name":"address","nodeType":"ElementaryTypeName","src":"5325:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5324:18:50"},"src":"5296:47:50"},{"documentation":{"id":9015,"nodeType":"StructuredDocumentation","src":"5349:256:50","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":9021,"name":"ERC1155MissingApprovalForAll","nameLocation":"5616:28:50","nodeType":"ErrorDefinition","parameters":{"id":9020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9017,"mutability":"mutable","name":"operator","nameLocation":"5653:8:50","nodeType":"VariableDeclaration","scope":9021,"src":"5645:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9016,"name":"address","nodeType":"ElementaryTypeName","src":"5645:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9019,"mutability":"mutable","name":"owner","nameLocation":"5671:5:50","nodeType":"VariableDeclaration","scope":9021,"src":"5663:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9018,"name":"address","nodeType":"ElementaryTypeName","src":"5663:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5644:33:50"},"src":"5610:68:50"},{"documentation":{"id":9022,"nodeType":"StructuredDocumentation","src":"5684:174:50","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":9026,"name":"ERC1155InvalidApprover","nameLocation":"5869:22:50","nodeType":"ErrorDefinition","parameters":{"id":9025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9024,"mutability":"mutable","name":"approver","nameLocation":"5900:8:50","nodeType":"VariableDeclaration","scope":9026,"src":"5892:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9023,"name":"address","nodeType":"ElementaryTypeName","src":"5892:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5891:18:50"},"src":"5863:47:50"},{"documentation":{"id":9027,"nodeType":"StructuredDocumentation","src":"5916:197:50","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":9031,"name":"ERC1155InvalidOperator","nameLocation":"6124:22:50","nodeType":"ErrorDefinition","parameters":{"id":9030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9029,"mutability":"mutable","name":"operator","nameLocation":"6155:8:50","nodeType":"VariableDeclaration","scope":9031,"src":"6147:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9028,"name":"address","nodeType":"ElementaryTypeName","src":"6147:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6146:18:50"},"src":"6118:47:50"},{"documentation":{"id":9032,"nodeType":"StructuredDocumentation","src":"6171:280:50","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":9038,"name":"ERC1155InvalidArrayLength","nameLocation":"6462:25:50","nodeType":"ErrorDefinition","parameters":{"id":9037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9034,"mutability":"mutable","name":"idsLength","nameLocation":"6496:9:50","nodeType":"VariableDeclaration","scope":9038,"src":"6488:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9033,"name":"uint256","nodeType":"ElementaryTypeName","src":"6488:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9036,"mutability":"mutable","name":"valuesLength","nameLocation":"6515:12:50","nodeType":"VariableDeclaration","scope":9038,"src":"6507:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9035,"name":"uint256","nodeType":"ElementaryTypeName","src":"6507:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6487:41:50"},"src":"6456:73:50"}],"scope":9040,"src":"4424:2107:50","usedErrors":[9004,9009,9014,9021,9026,9031,9038],"usedEvents":[]}],"src":"112:6420:50"},"id":50},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[10259],"ERC20":[9554],"IERC20":[9632],"IERC20Errors":[8944],"IERC20Metadata":[9658]},"id":9555,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9041,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:51"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":9043,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9555,"sourceUnit":9633,"src":"131:36:51","symbolAliases":[{"foreign":{"id":9042,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"139:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"./extensions/IERC20Metadata.sol","id":9045,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9555,"sourceUnit":9659,"src":"168:63:51","symbolAliases":[{"foreign":{"id":9044,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9658,"src":"176:14:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":9047,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9555,"sourceUnit":10260,"src":"232:48:51","symbolAliases":[{"foreign":{"id":9046,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10259,"src":"240:7:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":9049,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9555,"sourceUnit":9040,"src":"281:65:51","symbolAliases":[{"foreign":{"id":9048,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8944,"src":"289:12:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9051,"name":"Context","nameLocations":["1428:7:51"],"nodeType":"IdentifierPath","referencedDeclaration":10259,"src":"1428:7:51"},"id":9052,"nodeType":"InheritanceSpecifier","src":"1428:7:51"},{"baseName":{"id":9053,"name":"IERC20","nameLocations":["1437:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1437:6:51"},"id":9054,"nodeType":"InheritanceSpecifier","src":"1437:6:51"},{"baseName":{"id":9055,"name":"IERC20Metadata","nameLocations":["1445:14:51"],"nodeType":"IdentifierPath","referencedDeclaration":9658,"src":"1445:14:51"},"id":9056,"nodeType":"InheritanceSpecifier","src":"1445:14:51"},{"baseName":{"id":9057,"name":"IERC20Errors","nameLocations":["1461:12:51"],"nodeType":"IdentifierPath","referencedDeclaration":8944,"src":"1461:12:51"},"id":9058,"nodeType":"InheritanceSpecifier","src":"1461:12:51"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":9050,"nodeType":"StructuredDocumentation","src":"348:1052:51","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification."},"fullyImplemented":true,"id":9554,"linearizedBaseContracts":[9554,8944,9658,9632,10259],"name":"ERC20","nameLocation":"1419:5:51","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9062,"mutability":"mutable","name":"_balances","nameLocation":"1524:9:51","nodeType":"VariableDeclaration","scope":9554,"src":"1480:53:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":9061,"keyName":"account","keyNameLocation":"1496:7:51","keyType":{"id":9059,"name":"address","nodeType":"ElementaryTypeName","src":"1488:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1480:35:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9060,"name":"uint256","nodeType":"ElementaryTypeName","src":"1507:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":9068,"mutability":"mutable","name":"_allowances","nameLocation":"1612:11:51","nodeType":"VariableDeclaration","scope":9554,"src":"1540:83:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":9067,"keyName":"account","keyNameLocation":"1556:7:51","keyType":{"id":9063,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1540:63:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9066,"keyName":"spender","keyNameLocation":"1583:7:51","keyType":{"id":9064,"name":"address","nodeType":"ElementaryTypeName","src":"1575:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1567:35:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9065,"name":"uint256","nodeType":"ElementaryTypeName","src":"1594:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":9070,"mutability":"mutable","name":"_totalSupply","nameLocation":"1646:12:51","nodeType":"VariableDeclaration","scope":9554,"src":"1630:28:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1630:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":9072,"mutability":"mutable","name":"_name","nameLocation":"1680:5:51","nodeType":"VariableDeclaration","scope":9554,"src":"1665:20:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9071,"name":"string","nodeType":"ElementaryTypeName","src":"1665:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":9074,"mutability":"mutable","name":"_symbol","nameLocation":"1706:7:51","nodeType":"VariableDeclaration","scope":9554,"src":"1691:22:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9073,"name":"string","nodeType":"ElementaryTypeName","src":"1691:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":9090,"nodeType":"Block","src":"1952:57:51","statements":[{"expression":{"id":9084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9082,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9072,"src":"1962:5:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9083,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"1970:5:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1962:13:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":9085,"nodeType":"ExpressionStatement","src":"1962:13:51"},{"expression":{"id":9088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9086,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9074,"src":"1985:7:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9087,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9079,"src":"1995:7:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1985:17:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":9089,"nodeType":"ExpressionStatement","src":"1985:17:51"}]},"documentation":{"id":9075,"nodeType":"StructuredDocumentation","src":"1720:171:51","text":" @dev Sets the values for {name} and {symbol}.\n All two of these values are immutable: they can only be set once during\n construction."},"id":9091,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9077,"mutability":"mutable","name":"name_","nameLocation":"1922:5:51","nodeType":"VariableDeclaration","scope":9091,"src":"1908:19:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9076,"name":"string","nodeType":"ElementaryTypeName","src":"1908:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9079,"mutability":"mutable","name":"symbol_","nameLocation":"1943:7:51","nodeType":"VariableDeclaration","scope":9091,"src":"1929:21:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9078,"name":"string","nodeType":"ElementaryTypeName","src":"1929:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1907:44:51"},"returnParameters":{"id":9081,"nodeType":"ParameterList","parameters":[],"src":"1952:0:51"},"scope":9554,"src":"1896:113:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[9645],"body":{"id":9099,"nodeType":"Block","src":"2134:29:51","statements":[{"expression":{"id":9097,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9072,"src":"2151:5:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":9096,"id":9098,"nodeType":"Return","src":"2144:12:51"}]},"documentation":{"id":9092,"nodeType":"StructuredDocumentation","src":"2015:54:51","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":9100,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2083:4:51","nodeType":"FunctionDefinition","parameters":{"id":9093,"nodeType":"ParameterList","parameters":[],"src":"2087:2:51"},"returnParameters":{"id":9096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9095,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9100,"src":"2119:13:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9094,"name":"string","nodeType":"ElementaryTypeName","src":"2119:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2118:15:51"},"scope":9554,"src":"2074:89:51","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9651],"body":{"id":9108,"nodeType":"Block","src":"2338:31:51","statements":[{"expression":{"id":9106,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9074,"src":"2355:7:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":9105,"id":9107,"nodeType":"Return","src":"2348:14:51"}]},"documentation":{"id":9101,"nodeType":"StructuredDocumentation","src":"2169:102:51","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":9109,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2285:6:51","nodeType":"FunctionDefinition","parameters":{"id":9102,"nodeType":"ParameterList","parameters":[],"src":"2291:2:51"},"returnParameters":{"id":9105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9109,"src":"2323:13:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9103,"name":"string","nodeType":"ElementaryTypeName","src":"2323:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2322:15:51"},"scope":9554,"src":"2276:93:51","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9657],"body":{"id":9117,"nodeType":"Block","src":"3058:26:51","statements":[{"expression":{"hexValue":"3138","id":9115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3075:2:51","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":9114,"id":9116,"nodeType":"Return","src":"3068:9:51"}]},"documentation":{"id":9110,"nodeType":"StructuredDocumentation","src":"2375:622:51","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":9118,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3011:8:51","nodeType":"FunctionDefinition","parameters":{"id":9111,"nodeType":"ParameterList","parameters":[],"src":"3019:2:51"},"returnParameters":{"id":9114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9113,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9118,"src":"3051:5:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9112,"name":"uint8","nodeType":"ElementaryTypeName","src":"3051:5:51","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3050:7:51"},"scope":9554,"src":"3002:82:51","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9581],"body":{"id":9126,"nodeType":"Block","src":"3205:36:51","statements":[{"expression":{"id":9124,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9070,"src":"3222:12:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9123,"id":9125,"nodeType":"Return","src":"3215:19:51"}]},"documentation":{"id":9119,"nodeType":"StructuredDocumentation","src":"3090:49:51","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":9127,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3153:11:51","nodeType":"FunctionDefinition","parameters":{"id":9120,"nodeType":"ParameterList","parameters":[],"src":"3164:2:51"},"returnParameters":{"id":9123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9127,"src":"3196:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9121,"name":"uint256","nodeType":"ElementaryTypeName","src":"3196:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3195:9:51"},"scope":9554,"src":"3144:97:51","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9589],"body":{"id":9139,"nodeType":"Block","src":"3373:42:51","statements":[{"expression":{"baseExpression":{"id":9135,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"3390:9:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9137,"indexExpression":{"id":9136,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9130,"src":"3400:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3390:18:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9134,"id":9138,"nodeType":"Return","src":"3383:25:51"}]},"documentation":{"id":9128,"nodeType":"StructuredDocumentation","src":"3247:47:51","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":9140,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3308:9:51","nodeType":"FunctionDefinition","parameters":{"id":9131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9130,"mutability":"mutable","name":"account","nameLocation":"3326:7:51","nodeType":"VariableDeclaration","scope":9140,"src":"3318:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9129,"name":"address","nodeType":"ElementaryTypeName","src":"3318:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3317:17:51"},"returnParameters":{"id":9134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9140,"src":"3364:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9132,"name":"uint256","nodeType":"ElementaryTypeName","src":"3364:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3363:9:51"},"scope":9554,"src":"3299:116:51","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9599],"body":{"id":9163,"nodeType":"Block","src":"3685:103:51","statements":[{"assignments":[9151],"declarations":[{"constant":false,"id":9151,"mutability":"mutable","name":"owner","nameLocation":"3703:5:51","nodeType":"VariableDeclaration","scope":9163,"src":"3695:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9150,"name":"address","nodeType":"ElementaryTypeName","src":"3695:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9154,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":9152,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10249,"src":"3711:10:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3711:12:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3695:28:51"},{"expression":{"arguments":[{"id":9156,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9151,"src":"3743:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9157,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9143,"src":"3750:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9158,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9145,"src":"3754:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9155,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"3733:9:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3733:27:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9160,"nodeType":"ExpressionStatement","src":"3733:27:51"},{"expression":{"hexValue":"74727565","id":9161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3777:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":9149,"id":9162,"nodeType":"Return","src":"3770:11:51"}]},"documentation":{"id":9141,"nodeType":"StructuredDocumentation","src":"3421:184:51","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`."},"functionSelector":"a9059cbb","id":9164,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3619:8:51","nodeType":"FunctionDefinition","parameters":{"id":9146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9143,"mutability":"mutable","name":"to","nameLocation":"3636:2:51","nodeType":"VariableDeclaration","scope":9164,"src":"3628:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9142,"name":"address","nodeType":"ElementaryTypeName","src":"3628:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9145,"mutability":"mutable","name":"value","nameLocation":"3648:5:51","nodeType":"VariableDeclaration","scope":9164,"src":"3640:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9144,"name":"uint256","nodeType":"ElementaryTypeName","src":"3640:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3627:27:51"},"returnParameters":{"id":9149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9148,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9164,"src":"3679:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9147,"name":"bool","nodeType":"ElementaryTypeName","src":"3679:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3678:6:51"},"scope":9554,"src":"3610:178:51","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9609],"body":{"id":9180,"nodeType":"Block","src":"3935:51:51","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":9174,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9068,"src":"3952:11:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":9176,"indexExpression":{"id":9175,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9167,"src":"3964:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3952:18:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9178,"indexExpression":{"id":9177,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9169,"src":"3971:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3952:27:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9173,"id":9179,"nodeType":"Return","src":"3945:34:51"}]},"documentation":{"id":9165,"nodeType":"StructuredDocumentation","src":"3794:47:51","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":9181,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3855:9:51","nodeType":"FunctionDefinition","parameters":{"id":9170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9167,"mutability":"mutable","name":"owner","nameLocation":"3873:5:51","nodeType":"VariableDeclaration","scope":9181,"src":"3865:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9166,"name":"address","nodeType":"ElementaryTypeName","src":"3865:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9169,"mutability":"mutable","name":"spender","nameLocation":"3888:7:51","nodeType":"VariableDeclaration","scope":9181,"src":"3880:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9168,"name":"address","nodeType":"ElementaryTypeName","src":"3880:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3864:32:51"},"returnParameters":{"id":9173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9181,"src":"3926:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9171,"name":"uint256","nodeType":"ElementaryTypeName","src":"3926:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3925:9:51"},"scope":9554,"src":"3846:140:51","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9619],"body":{"id":9204,"nodeType":"Block","src":"4372:107:51","statements":[{"assignments":[9192],"declarations":[{"constant":false,"id":9192,"mutability":"mutable","name":"owner","nameLocation":"4390:5:51","nodeType":"VariableDeclaration","scope":9204,"src":"4382:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9191,"name":"address","nodeType":"ElementaryTypeName","src":"4382:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9195,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":9193,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10249,"src":"4398:10:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4398:12:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4382:28:51"},{"expression":{"arguments":[{"id":9197,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"4429:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9198,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9184,"src":"4436:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9186,"src":"4445:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9196,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[9445,9505],"referencedDeclaration":9445,"src":"4420:8:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4420:31:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9201,"nodeType":"ExpressionStatement","src":"4420:31:51"},{"expression":{"hexValue":"74727565","id":9202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4468:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":9190,"id":9203,"nodeType":"Return","src":"4461:11:51"}]},"documentation":{"id":9182,"nodeType":"StructuredDocumentation","src":"3992:296:51","text":" @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":9205,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4302:7:51","nodeType":"FunctionDefinition","parameters":{"id":9187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9184,"mutability":"mutable","name":"spender","nameLocation":"4318:7:51","nodeType":"VariableDeclaration","scope":9205,"src":"4310:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9183,"name":"address","nodeType":"ElementaryTypeName","src":"4310:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9186,"mutability":"mutable","name":"value","nameLocation":"4335:5:51","nodeType":"VariableDeclaration","scope":9205,"src":"4327:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9185,"name":"uint256","nodeType":"ElementaryTypeName","src":"4327:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4309:32:51"},"returnParameters":{"id":9190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9205,"src":"4366:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9188,"name":"bool","nodeType":"ElementaryTypeName","src":"4366:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4365:6:51"},"scope":9554,"src":"4293:186:51","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9631],"body":{"id":9236,"nodeType":"Block","src":"5132:151:51","statements":[{"assignments":[9218],"declarations":[{"constant":false,"id":9218,"mutability":"mutable","name":"spender","nameLocation":"5150:7:51","nodeType":"VariableDeclaration","scope":9236,"src":"5142:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9217,"name":"address","nodeType":"ElementaryTypeName","src":"5142:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9221,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":9219,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10249,"src":"5160:10:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5160:12:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5142:30:51"},{"expression":{"arguments":[{"id":9223,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"5198:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9224,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9218,"src":"5204:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9225,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9212,"src":"5213:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9222,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9553,"src":"5182:15:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5182:37:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9227,"nodeType":"ExpressionStatement","src":"5182:37:51"},{"expression":{"arguments":[{"id":9229,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"5239:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9230,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9210,"src":"5245:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9231,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9212,"src":"5249:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9228,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"5229:9:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5229:26:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9233,"nodeType":"ExpressionStatement","src":"5229:26:51"},{"expression":{"hexValue":"74727565","id":9234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5272:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":9216,"id":9235,"nodeType":"Return","src":"5265:11:51"}]},"documentation":{"id":9206,"nodeType":"StructuredDocumentation","src":"4485:549:51","text":" @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`."},"functionSelector":"23b872dd","id":9237,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"5048:12:51","nodeType":"FunctionDefinition","parameters":{"id":9213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9208,"mutability":"mutable","name":"from","nameLocation":"5069:4:51","nodeType":"VariableDeclaration","scope":9237,"src":"5061:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9207,"name":"address","nodeType":"ElementaryTypeName","src":"5061:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9210,"mutability":"mutable","name":"to","nameLocation":"5083:2:51","nodeType":"VariableDeclaration","scope":9237,"src":"5075:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9209,"name":"address","nodeType":"ElementaryTypeName","src":"5075:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9212,"mutability":"mutable","name":"value","nameLocation":"5095:5:51","nodeType":"VariableDeclaration","scope":9237,"src":"5087:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9211,"name":"uint256","nodeType":"ElementaryTypeName","src":"5087:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5060:41:51"},"returnParameters":{"id":9216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9237,"src":"5126:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9214,"name":"bool","nodeType":"ElementaryTypeName","src":"5126:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5125:6:51"},"scope":9554,"src":"5039:244:51","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9283,"nodeType":"Block","src":"5725:231:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9247,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9240,"src":"5739:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5755:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5747:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9248,"name":"address","nodeType":"ElementaryTypeName","src":"5747:7:51","typeDescriptions":{}}},"id":9251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5747:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5739:18:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9261,"nodeType":"IfStatement","src":"5735:86:51","trueBody":{"id":9260,"nodeType":"Block","src":"5759:62:51","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5807:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5799:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9254,"name":"address","nodeType":"ElementaryTypeName","src":"5799:7:51","typeDescriptions":{}}},"id":9257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5799:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9253,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8919,"src":"5780:18:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5780:30:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9259,"nodeType":"RevertStatement","src":"5773:37:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9262,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"5834:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5848:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5840:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9263,"name":"address","nodeType":"ElementaryTypeName","src":"5840:7:51","typeDescriptions":{}}},"id":9266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5840:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5834:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9276,"nodeType":"IfStatement","src":"5830:86:51","trueBody":{"id":9275,"nodeType":"Block","src":"5852:64:51","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5902:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5894:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9269,"name":"address","nodeType":"ElementaryTypeName","src":"5894:7:51","typeDescriptions":{}}},"id":9272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5894:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9268,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8924,"src":"5873:20:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5873:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9274,"nodeType":"RevertStatement","src":"5866:39:51"}]}},{"expression":{"arguments":[{"id":9278,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9240,"src":"5933:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9279,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9242,"src":"5939:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9280,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9244,"src":"5943:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9277,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9361,"src":"5925:7:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5925:24:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9282,"nodeType":"ExpressionStatement","src":"5925:24:51"}]},"documentation":{"id":9238,"nodeType":"StructuredDocumentation","src":"5289:362:51","text":" @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":9284,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"5665:9:51","nodeType":"FunctionDefinition","parameters":{"id":9245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9240,"mutability":"mutable","name":"from","nameLocation":"5683:4:51","nodeType":"VariableDeclaration","scope":9284,"src":"5675:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9239,"name":"address","nodeType":"ElementaryTypeName","src":"5675:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9242,"mutability":"mutable","name":"to","nameLocation":"5697:2:51","nodeType":"VariableDeclaration","scope":9284,"src":"5689:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9241,"name":"address","nodeType":"ElementaryTypeName","src":"5689:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9244,"mutability":"mutable","name":"value","nameLocation":"5709:5:51","nodeType":"VariableDeclaration","scope":9284,"src":"5701:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9243,"name":"uint256","nodeType":"ElementaryTypeName","src":"5701:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5674:41:51"},"returnParameters":{"id":9246,"nodeType":"ParameterList","parameters":[],"src":"5725:0:51"},"scope":9554,"src":"5656:300:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9360,"nodeType":"Block","src":"6346:1032:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9294,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9287,"src":"6360:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6376:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6368:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9295,"name":"address","nodeType":"ElementaryTypeName","src":"6368:7:51","typeDescriptions":{}}},"id":9298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6368:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6360:18:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9331,"nodeType":"Block","src":"6534:362:51","statements":[{"assignments":[9306],"declarations":[{"constant":false,"id":9306,"mutability":"mutable","name":"fromBalance","nameLocation":"6556:11:51","nodeType":"VariableDeclaration","scope":9331,"src":"6548:19:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9305,"name":"uint256","nodeType":"ElementaryTypeName","src":"6548:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9310,"initialValue":{"baseExpression":{"id":9307,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"6570:9:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9309,"indexExpression":{"id":9308,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9287,"src":"6580:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6570:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6548:37:51"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9311,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9306,"src":"6603:11:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9312,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"6617:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6603:19:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9321,"nodeType":"IfStatement","src":"6599:115:51","trueBody":{"id":9320,"nodeType":"Block","src":"6624:90:51","statements":[{"errorCall":{"arguments":[{"id":9315,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9287,"src":"6674:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9316,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9306,"src":"6680:11:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9317,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"6693:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9314,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8914,"src":"6649:24:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":9318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6649:50:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9319,"nodeType":"RevertStatement","src":"6642:57:51"}]}},{"id":9330,"nodeType":"UncheckedBlock","src":"6727:159:51","statements":[{"expression":{"id":9328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9322,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"6834:9:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9324,"indexExpression":{"id":9323,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9287,"src":"6844:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6834:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9325,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9306,"src":"6852:11:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"6866:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6852:19:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6834:37:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9329,"nodeType":"ExpressionStatement","src":"6834:37:51"}]}]},"id":9332,"nodeType":"IfStatement","src":"6356:540:51","trueBody":{"id":9304,"nodeType":"Block","src":"6380:148:51","statements":[{"expression":{"id":9302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9300,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9070,"src":"6496:12:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9301,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"6512:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6496:21:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9303,"nodeType":"ExpressionStatement","src":"6496:21:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9333,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"6910:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6924:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6916:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9334,"name":"address","nodeType":"ElementaryTypeName","src":"6916:7:51","typeDescriptions":{}}},"id":9337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6916:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6910:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9352,"nodeType":"Block","src":"7125:206:51","statements":[{"id":9351,"nodeType":"UncheckedBlock","src":"7139:182:51","statements":[{"expression":{"id":9349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9345,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9062,"src":"7284:9:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9347,"indexExpression":{"id":9346,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"7294:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7284:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9348,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"7301:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7284:22:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9350,"nodeType":"ExpressionStatement","src":"7284:22:51"}]}]},"id":9353,"nodeType":"IfStatement","src":"6906:425:51","trueBody":{"id":9344,"nodeType":"Block","src":"6928:191:51","statements":[{"id":9343,"nodeType":"UncheckedBlock","src":"6942:167:51","statements":[{"expression":{"id":9341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9339,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9070,"src":"7073:12:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":9340,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"7089:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7073:21:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9342,"nodeType":"ExpressionStatement","src":"7073:21:51"}]}]}},{"eventCall":{"arguments":[{"id":9355,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9287,"src":"7355:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9356,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"7361:2:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9357,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"7365:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9354,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9566,"src":"7346:8:51","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7346:25:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9359,"nodeType":"EmitStatement","src":"7341:30:51"}]},"documentation":{"id":9285,"nodeType":"StructuredDocumentation","src":"5962:304:51","text":" @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event."},"id":9361,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"6280:7:51","nodeType":"FunctionDefinition","parameters":{"id":9292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9287,"mutability":"mutable","name":"from","nameLocation":"6296:4:51","nodeType":"VariableDeclaration","scope":9361,"src":"6288:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9286,"name":"address","nodeType":"ElementaryTypeName","src":"6288:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9289,"mutability":"mutable","name":"to","nameLocation":"6310:2:51","nodeType":"VariableDeclaration","scope":9361,"src":"6302:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9288,"name":"address","nodeType":"ElementaryTypeName","src":"6302:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9291,"mutability":"mutable","name":"value","nameLocation":"6322:5:51","nodeType":"VariableDeclaration","scope":9361,"src":"6314:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9290,"name":"uint256","nodeType":"ElementaryTypeName","src":"6314:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6287:41:51"},"returnParameters":{"id":9293,"nodeType":"ParameterList","parameters":[],"src":"6346:0:51"},"scope":9554,"src":"6271:1107:51","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9393,"nodeType":"Block","src":"7777:152:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9369,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9364,"src":"7791:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7810:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7802:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9370,"name":"address","nodeType":"ElementaryTypeName","src":"7802:7:51","typeDescriptions":{}}},"id":9373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7802:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7791:21:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9383,"nodeType":"IfStatement","src":"7787:91:51","trueBody":{"id":9382,"nodeType":"Block","src":"7814:64:51","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7864:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7856:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9376,"name":"address","nodeType":"ElementaryTypeName","src":"7856:7:51","typeDescriptions":{}}},"id":9379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7856:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9375,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8924,"src":"7835:20:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7835:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9381,"nodeType":"RevertStatement","src":"7828:39:51"}]}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":9387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7903:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9386,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7895:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9385,"name":"address","nodeType":"ElementaryTypeName","src":"7895:7:51","typeDescriptions":{}}},"id":9388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7895:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9389,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9364,"src":"7907:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9390,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9366,"src":"7916:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9384,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9361,"src":"7887:7:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7887:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9392,"nodeType":"ExpressionStatement","src":"7887:35:51"}]},"documentation":{"id":9362,"nodeType":"StructuredDocumentation","src":"7384:332:51","text":" @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":9394,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7730:5:51","nodeType":"FunctionDefinition","parameters":{"id":9367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9364,"mutability":"mutable","name":"account","nameLocation":"7744:7:51","nodeType":"VariableDeclaration","scope":9394,"src":"7736:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9363,"name":"address","nodeType":"ElementaryTypeName","src":"7736:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9366,"mutability":"mutable","name":"value","nameLocation":"7761:5:51","nodeType":"VariableDeclaration","scope":9394,"src":"7753:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9365,"name":"uint256","nodeType":"ElementaryTypeName","src":"7753:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7735:32:51"},"returnParameters":{"id":9368,"nodeType":"ParameterList","parameters":[],"src":"7777:0:51"},"scope":9554,"src":"7721:208:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9426,"nodeType":"Block","src":"8303:150:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9402,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9397,"src":"8317:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8336:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9404,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8328:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9403,"name":"address","nodeType":"ElementaryTypeName","src":"8328:7:51","typeDescriptions":{}}},"id":9406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8328:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8317:21:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9416,"nodeType":"IfStatement","src":"8313:89:51","trueBody":{"id":9415,"nodeType":"Block","src":"8340:62:51","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8388:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8380:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9409,"name":"address","nodeType":"ElementaryTypeName","src":"8380:7:51","typeDescriptions":{}}},"id":9412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8380:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9408,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8919,"src":"8361:18:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8361:30:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9414,"nodeType":"RevertStatement","src":"8354:37:51"}]}},{"expression":{"arguments":[{"id":9418,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9397,"src":"8419:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":9421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8436:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8428:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9419,"name":"address","nodeType":"ElementaryTypeName","src":"8428:7:51","typeDescriptions":{}}},"id":9422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8428:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9423,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9399,"src":"8440:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9417,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9361,"src":"8411:7:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8411:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9425,"nodeType":"ExpressionStatement","src":"8411:35:51"}]},"documentation":{"id":9395,"nodeType":"StructuredDocumentation","src":"7935:307:51","text":" @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead"},"id":9427,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"8256:5:51","nodeType":"FunctionDefinition","parameters":{"id":9400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9397,"mutability":"mutable","name":"account","nameLocation":"8270:7:51","nodeType":"VariableDeclaration","scope":9427,"src":"8262:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9396,"name":"address","nodeType":"ElementaryTypeName","src":"8262:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9399,"mutability":"mutable","name":"value","nameLocation":"8287:5:51","nodeType":"VariableDeclaration","scope":9427,"src":"8279:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9398,"name":"uint256","nodeType":"ElementaryTypeName","src":"8279:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8261:32:51"},"returnParameters":{"id":9401,"nodeType":"ParameterList","parameters":[],"src":"8303:0:51"},"scope":9554,"src":"8247:206:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9444,"nodeType":"Block","src":"9063:54:51","statements":[{"expression":{"arguments":[{"id":9438,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9430,"src":"9082:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9439,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9432,"src":"9089:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9440,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9434,"src":"9098:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":9441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9105:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9437,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[9445,9505],"referencedDeclaration":9505,"src":"9073:8:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":9442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9073:37:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9443,"nodeType":"ExpressionStatement","src":"9073:37:51"}]},"documentation":{"id":9428,"nodeType":"StructuredDocumentation","src":"8459:525:51","text":" @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":9445,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8998:8:51","nodeType":"FunctionDefinition","parameters":{"id":9435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9430,"mutability":"mutable","name":"owner","nameLocation":"9015:5:51","nodeType":"VariableDeclaration","scope":9445,"src":"9007:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9429,"name":"address","nodeType":"ElementaryTypeName","src":"9007:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9432,"mutability":"mutable","name":"spender","nameLocation":"9030:7:51","nodeType":"VariableDeclaration","scope":9445,"src":"9022:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9431,"name":"address","nodeType":"ElementaryTypeName","src":"9022:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9434,"mutability":"mutable","name":"value","nameLocation":"9047:5:51","nodeType":"VariableDeclaration","scope":9445,"src":"9039:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9433,"name":"uint256","nodeType":"ElementaryTypeName","src":"9039:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9006:47:51"},"returnParameters":{"id":9436,"nodeType":"ParameterList","parameters":[],"src":"9063:0:51"},"scope":9554,"src":"8989:128:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9504,"nodeType":"Block","src":"10047:334:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9457,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9448,"src":"10061:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10078:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10070:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9458,"name":"address","nodeType":"ElementaryTypeName","src":"10070:7:51","typeDescriptions":{}}},"id":9461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10070:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10061:19:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9471,"nodeType":"IfStatement","src":"10057:89:51","trueBody":{"id":9470,"nodeType":"Block","src":"10082:64:51","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10132:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10124:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9464,"name":"address","nodeType":"ElementaryTypeName","src":"10124:7:51","typeDescriptions":{}}},"id":9467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10124:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9463,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8938,"src":"10103:20:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10103:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9469,"nodeType":"RevertStatement","src":"10096:39:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9472,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9450,"src":"10159:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10178:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10170:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9473,"name":"address","nodeType":"ElementaryTypeName","src":"10170:7:51","typeDescriptions":{}}},"id":9476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10170:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10159:21:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9486,"nodeType":"IfStatement","src":"10155:90:51","trueBody":{"id":9485,"nodeType":"Block","src":"10182:63:51","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10231:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10223:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9479,"name":"address","nodeType":"ElementaryTypeName","src":"10223:7:51","typeDescriptions":{}}},"id":9482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10223:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9478,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8943,"src":"10203:19:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10203:31:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9484,"nodeType":"RevertStatement","src":"10196:38:51"}]}},{"expression":{"id":9493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":9487,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9068,"src":"10254:11:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":9490,"indexExpression":{"id":9488,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9448,"src":"10266:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10254:18:51","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":9491,"indexExpression":{"id":9489,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9450,"src":"10273:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10254:27:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9492,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9452,"src":"10284:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10254:35:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9494,"nodeType":"ExpressionStatement","src":"10254:35:51"},{"condition":{"id":9495,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9454,"src":"10303:9:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9503,"nodeType":"IfStatement","src":"10299:76:51","trueBody":{"id":9502,"nodeType":"Block","src":"10314:61:51","statements":[{"eventCall":{"arguments":[{"id":9497,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9448,"src":"10342:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9498,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9450,"src":"10349:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9499,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9452,"src":"10358:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9496,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9575,"src":"10333:8:51","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":9500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10333:31:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9501,"nodeType":"EmitStatement","src":"10328:36:51"}]}}]},"documentation":{"id":9446,"nodeType":"StructuredDocumentation","src":"9123:821:51","text":" @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}."},"id":9505,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"9958:8:51","nodeType":"FunctionDefinition","parameters":{"id":9455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9448,"mutability":"mutable","name":"owner","nameLocation":"9975:5:51","nodeType":"VariableDeclaration","scope":9505,"src":"9967:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9447,"name":"address","nodeType":"ElementaryTypeName","src":"9967:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9450,"mutability":"mutable","name":"spender","nameLocation":"9990:7:51","nodeType":"VariableDeclaration","scope":9505,"src":"9982:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9449,"name":"address","nodeType":"ElementaryTypeName","src":"9982:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9452,"mutability":"mutable","name":"value","nameLocation":"10007:5:51","nodeType":"VariableDeclaration","scope":9505,"src":"9999:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9451,"name":"uint256","nodeType":"ElementaryTypeName","src":"9999:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9454,"mutability":"mutable","name":"emitEvent","nameLocation":"10019:9:51","nodeType":"VariableDeclaration","scope":9505,"src":"10014:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9453,"name":"bool","nodeType":"ElementaryTypeName","src":"10014:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9966:63:51"},"returnParameters":{"id":9456,"nodeType":"ParameterList","parameters":[],"src":"10047:0:51"},"scope":9554,"src":"9949:432:51","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9552,"nodeType":"Block","src":"10752:388:51","statements":[{"assignments":[9516],"declarations":[{"constant":false,"id":9516,"mutability":"mutable","name":"currentAllowance","nameLocation":"10770:16:51","nodeType":"VariableDeclaration","scope":9552,"src":"10762:24:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9515,"name":"uint256","nodeType":"ElementaryTypeName","src":"10762:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9521,"initialValue":{"arguments":[{"id":9518,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9508,"src":"10799:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9519,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9510,"src":"10806:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9517,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9181,"src":"10789:9:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":9520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10789:25:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10762:52:51"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9522,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9516,"src":"10828:16:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":9525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10853:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9524,"name":"uint256","nodeType":"ElementaryTypeName","src":"10853:7:51","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":9523,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10848:4:51","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10848:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":9527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10862:3:51","memberName":"max","nodeType":"MemberAccess","src":"10848:17:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10828:37:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9551,"nodeType":"IfStatement","src":"10824:310:51","trueBody":{"id":9550,"nodeType":"Block","src":"10867:267:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9529,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9516,"src":"10885:16:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9530,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"10904:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10885:24:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9539,"nodeType":"IfStatement","src":"10881:130:51","trueBody":{"id":9538,"nodeType":"Block","src":"10911:100:51","statements":[{"errorCall":{"arguments":[{"id":9533,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9510,"src":"10963:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9534,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9516,"src":"10972:16:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9535,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"10990:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9532,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8933,"src":"10936:26:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":9536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10936:60:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9537,"nodeType":"RevertStatement","src":"10929:67:51"}]}},{"id":9549,"nodeType":"UncheckedBlock","src":"11024:100:51","statements":[{"expression":{"arguments":[{"id":9541,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9508,"src":"11061:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9542,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9510,"src":"11068:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9543,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9516,"src":"11077:16:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9544,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"11096:5:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11077:24:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":9546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11103:5:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9540,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[9445,9505],"referencedDeclaration":9505,"src":"11052:8:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":9547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11052:57:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9548,"nodeType":"ExpressionStatement","src":"11052:57:51"}]}]}}]},"documentation":{"id":9506,"nodeType":"StructuredDocumentation","src":"10387:271:51","text":" @dev Updates `owner` s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event."},"id":9553,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"10672:15:51","nodeType":"FunctionDefinition","parameters":{"id":9513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9508,"mutability":"mutable","name":"owner","nameLocation":"10696:5:51","nodeType":"VariableDeclaration","scope":9553,"src":"10688:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9507,"name":"address","nodeType":"ElementaryTypeName","src":"10688:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9510,"mutability":"mutable","name":"spender","nameLocation":"10711:7:51","nodeType":"VariableDeclaration","scope":9553,"src":"10703:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9509,"name":"address","nodeType":"ElementaryTypeName","src":"10703:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9512,"mutability":"mutable","name":"value","nameLocation":"10728:5:51","nodeType":"VariableDeclaration","scope":9553,"src":"10720:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9511,"name":"uint256","nodeType":"ElementaryTypeName","src":"10720:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10687:47:51"},"returnParameters":{"id":9514,"nodeType":"ParameterList","parameters":[],"src":"10752:0:51"},"scope":9554,"src":"10663:477:51","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":9555,"src":"1401:9741:51","usedErrors":[8914,8919,8924,8933,8938,8943],"usedEvents":[9566,9575]}],"src":"105:11038:51"},"id":51},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[9632]},"id":9633,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9556,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:52"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":9557,"nodeType":"StructuredDocumentation","src":"132:70:52","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":9632,"linearizedBaseContracts":[9632],"name":"IERC20","nameLocation":"213:6:52","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":9558,"nodeType":"StructuredDocumentation","src":"226:158:52","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":9566,"name":"Transfer","nameLocation":"395:8:52","nodeType":"EventDefinition","parameters":{"id":9565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9560,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:52","nodeType":"VariableDeclaration","scope":9566,"src":"404:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9559,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9562,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:52","nodeType":"VariableDeclaration","scope":9566,"src":"426:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9561,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9564,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:52","nodeType":"VariableDeclaration","scope":9566,"src":"446:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9563,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:52"},"src":"389:72:52"},{"anonymous":false,"documentation":{"id":9567,"nodeType":"StructuredDocumentation","src":"467:148:52","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":9575,"name":"Approval","nameLocation":"626:8:52","nodeType":"EventDefinition","parameters":{"id":9574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9569,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:52","nodeType":"VariableDeclaration","scope":9575,"src":"635:21:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9568,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9571,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:52","nodeType":"VariableDeclaration","scope":9575,"src":"658:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9570,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9573,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:52","nodeType":"VariableDeclaration","scope":9575,"src":"683:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9572,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:52"},"src":"620:78:52"},{"documentation":{"id":9576,"nodeType":"StructuredDocumentation","src":"704:65:52","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":9581,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:52","nodeType":"FunctionDefinition","parameters":{"id":9577,"nodeType":"ParameterList","parameters":[],"src":"794:2:52"},"returnParameters":{"id":9580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9581,"src":"820:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9578,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:52"},"scope":9632,"src":"774:55:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9582,"nodeType":"StructuredDocumentation","src":"835:71:52","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":9589,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:52","nodeType":"FunctionDefinition","parameters":{"id":9585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9584,"mutability":"mutable","name":"account","nameLocation":"938:7:52","nodeType":"VariableDeclaration","scope":9589,"src":"930:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9583,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:52"},"returnParameters":{"id":9588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9589,"src":"970:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9586,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:52"},"scope":9632,"src":"911:68:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9590,"nodeType":"StructuredDocumentation","src":"985:213:52","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":9599,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:52","nodeType":"FunctionDefinition","parameters":{"id":9595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9592,"mutability":"mutable","name":"to","nameLocation":"1229:2:52","nodeType":"VariableDeclaration","scope":9599,"src":"1221:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9591,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9594,"mutability":"mutable","name":"value","nameLocation":"1241:5:52","nodeType":"VariableDeclaration","scope":9599,"src":"1233:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9593,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:52"},"returnParameters":{"id":9598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9597,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9599,"src":"1266:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9596,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:52"},"scope":9632,"src":"1203:69:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9600,"nodeType":"StructuredDocumentation","src":"1278:264:52","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":9609,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:52","nodeType":"FunctionDefinition","parameters":{"id":9605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9602,"mutability":"mutable","name":"owner","nameLocation":"1574:5:52","nodeType":"VariableDeclaration","scope":9609,"src":"1566:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9601,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9604,"mutability":"mutable","name":"spender","nameLocation":"1589:7:52","nodeType":"VariableDeclaration","scope":9609,"src":"1581:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9603,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:52"},"returnParameters":{"id":9608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9609,"src":"1621:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9606,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:52"},"scope":9632,"src":"1547:83:52","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9610,"nodeType":"StructuredDocumentation","src":"1636:667:52","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":9619,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:52","nodeType":"FunctionDefinition","parameters":{"id":9615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9612,"mutability":"mutable","name":"spender","nameLocation":"2333:7:52","nodeType":"VariableDeclaration","scope":9619,"src":"2325:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9611,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9614,"mutability":"mutable","name":"value","nameLocation":"2350:5:52","nodeType":"VariableDeclaration","scope":9619,"src":"2342:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9613,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:52"},"returnParameters":{"id":9618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9619,"src":"2375:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9616,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:52"},"scope":9632,"src":"2308:73:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9620,"nodeType":"StructuredDocumentation","src":"2387:297:52","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":9631,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:52","nodeType":"FunctionDefinition","parameters":{"id":9627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9622,"mutability":"mutable","name":"from","nameLocation":"2719:4:52","nodeType":"VariableDeclaration","scope":9631,"src":"2711:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9621,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9624,"mutability":"mutable","name":"to","nameLocation":"2733:2:52","nodeType":"VariableDeclaration","scope":9631,"src":"2725:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9623,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9626,"mutability":"mutable","name":"value","nameLocation":"2745:5:52","nodeType":"VariableDeclaration","scope":9631,"src":"2737:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9625,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:52"},"returnParameters":{"id":9630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9631,"src":"2770:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9628,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:52"},"scope":9632,"src":"2689:87:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9633,"src":"203:2575:52","usedErrors":[],"usedEvents":[9566,9575]}],"src":"106:2673:52"},"id":52},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[9632],"IERC20Metadata":[9658]},"id":9659,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9634,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:53"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":9636,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9659,"sourceUnit":9633,"src":"151:37:53","symbolAliases":[{"foreign":{"id":9635,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"159:6:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9638,"name":"IERC20","nameLocations":["305:6:53"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"305:6:53"},"id":9639,"nodeType":"InheritanceSpecifier","src":"305:6:53"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":9637,"nodeType":"StructuredDocumentation","src":"190:86:53","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":9658,"linearizedBaseContracts":[9658,9632],"name":"IERC20Metadata","nameLocation":"287:14:53","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9640,"nodeType":"StructuredDocumentation","src":"318:54:53","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":9645,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:53","nodeType":"FunctionDefinition","parameters":{"id":9641,"nodeType":"ParameterList","parameters":[],"src":"390:2:53"},"returnParameters":{"id":9644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9645,"src":"416:13:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9642,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:53","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:53"},"scope":9658,"src":"377:54:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9646,"nodeType":"StructuredDocumentation","src":"437:56:53","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":9651,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:53","nodeType":"FunctionDefinition","parameters":{"id":9647,"nodeType":"ParameterList","parameters":[],"src":"513:2:53"},"returnParameters":{"id":9650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9651,"src":"539:13:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9648,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:53","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:53"},"scope":9658,"src":"498:56:53","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9652,"nodeType":"StructuredDocumentation","src":"560:65:53","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":9657,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:53","nodeType":"FunctionDefinition","parameters":{"id":9653,"nodeType":"ParameterList","parameters":[],"src":"647:2:53"},"returnParameters":{"id":9656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9655,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9657,"src":"673:5:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9654,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:53","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:53"},"scope":9658,"src":"630:50:53","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9659,"src":"277:405:53","usedErrors":[],"usedEvents":[9566,9575]}],"src":"125:558:53"},"id":53},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[9694]},"id":9695,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9660,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:54"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":9661,"nodeType":"StructuredDocumentation","src":"149:1963:54","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":9694,"linearizedBaseContracts":[9694],"name":"IERC20Permit","nameLocation":"2123:12:54","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9662,"nodeType":"StructuredDocumentation","src":"2142:850:54","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":9679,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:54","nodeType":"FunctionDefinition","parameters":{"id":9677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9664,"mutability":"mutable","name":"owner","nameLocation":"3030:5:54","nodeType":"VariableDeclaration","scope":9679,"src":"3022:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9663,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9666,"mutability":"mutable","name":"spender","nameLocation":"3053:7:54","nodeType":"VariableDeclaration","scope":9679,"src":"3045:15:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9665,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9668,"mutability":"mutable","name":"value","nameLocation":"3078:5:54","nodeType":"VariableDeclaration","scope":9679,"src":"3070:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9667,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9670,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:54","nodeType":"VariableDeclaration","scope":9679,"src":"3093:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9669,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9672,"mutability":"mutable","name":"v","nameLocation":"3125:1:54","nodeType":"VariableDeclaration","scope":9679,"src":"3119:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9671,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:54","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":9674,"mutability":"mutable","name":"r","nameLocation":"3144:1:54","nodeType":"VariableDeclaration","scope":9679,"src":"3136:9:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9673,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9676,"mutability":"mutable","name":"s","nameLocation":"3163:1:54","nodeType":"VariableDeclaration","scope":9679,"src":"3155:9:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9675,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:54"},"returnParameters":{"id":9678,"nodeType":"ParameterList","parameters":[],"src":"3179:0:54"},"scope":9694,"src":"2997:183:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9680,"nodeType":"StructuredDocumentation","src":"3186:294:54","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":9687,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:54","nodeType":"FunctionDefinition","parameters":{"id":9683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9682,"mutability":"mutable","name":"owner","nameLocation":"3509:5:54","nodeType":"VariableDeclaration","scope":9687,"src":"3501:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9681,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:54"},"returnParameters":{"id":9686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9687,"src":"3539:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9684,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:54"},"scope":9694,"src":"3485:63:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9688,"nodeType":"StructuredDocumentation","src":"3554:128:54","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":9693,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:54","nodeType":"FunctionDefinition","parameters":{"id":9689,"nodeType":"ParameterList","parameters":[],"src":"3765:2:54"},"returnParameters":{"id":9692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9693,"src":"3791:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9690,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:54"},"scope":9694,"src":"3740:60:54","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9695,"src":"2113:1689:54","usedErrors":[],"usedEvents":[]}],"src":"123:3680:54"},"id":54},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[10237],"IERC20":[9632],"IERC20Permit":[9694],"SafeERC20":[9984]},"id":9985,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9696,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:55"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":9698,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9985,"sourceUnit":9633,"src":"141:37:55","symbolAliases":[{"foreign":{"id":9697,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"149:6:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":9700,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9985,"sourceUnit":9695,"src":"179:60:55","symbolAliases":[{"foreign":{"id":9699,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9694,"src":"187:12:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":9702,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9985,"sourceUnit":10238,"src":"240:51:55","symbolAliases":[{"foreign":{"id":9701,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10237,"src":"248:7:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":9703,"nodeType":"StructuredDocumentation","src":"293:457:55","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":9984,"linearizedBaseContracts":[9984],"name":"SafeERC20","nameLocation":"759:9:55","nodeType":"ContractDefinition","nodes":[{"global":false,"id":9706,"libraryName":{"id":9704,"name":"Address","nameLocations":["781:7:55"],"nodeType":"IdentifierPath","referencedDeclaration":10237,"src":"781:7:55"},"nodeType":"UsingForDirective","src":"775:26:55","typeName":{"id":9705,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":9707,"nodeType":"StructuredDocumentation","src":"807:64:55","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":9711,"name":"SafeERC20FailedOperation","nameLocation":"882:24:55","nodeType":"ErrorDefinition","parameters":{"id":9710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9709,"mutability":"mutable","name":"token","nameLocation":"915:5:55","nodeType":"VariableDeclaration","scope":9711,"src":"907:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9708,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:55"},"src":"876:46:55"},{"documentation":{"id":9712,"nodeType":"StructuredDocumentation","src":"928:71:55","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":9720,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:55","nodeType":"ErrorDefinition","parameters":{"id":9719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9714,"mutability":"mutable","name":"spender","nameLocation":"1051:7:55","nodeType":"VariableDeclaration","scope":9720,"src":"1043:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9713,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9716,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:55","nodeType":"VariableDeclaration","scope":9720,"src":"1060:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9715,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9718,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:55","nodeType":"VariableDeclaration","scope":9720,"src":"1086:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9717,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:55"},"src":"1004:109:55"},{"body":{"id":9743,"nodeType":"Block","src":"1375:88:55","statements":[{"expression":{"arguments":[{"id":9732,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9724,"src":"1405:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":9735,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9724,"src":"1427:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:55","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":9599,"src":"1427:14:55","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":9737,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9726,"src":"1444:2:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9738,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9728,"src":"1448:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9739,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":9733,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:55","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:55","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9731,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9934,"src":"1385:19:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":9741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9742,"nodeType":"ExpressionStatement","src":"1385:71:55"}]},"documentation":{"id":9721,"nodeType":"StructuredDocumentation","src":"1119:179:55","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":9744,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:55","nodeType":"FunctionDefinition","parameters":{"id":9729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9724,"mutability":"mutable","name":"token","nameLocation":"1332:5:55","nodeType":"VariableDeclaration","scope":9744,"src":"1325:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9723,"nodeType":"UserDefinedTypeName","pathNode":{"id":9722,"name":"IERC20","nameLocations":["1325:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1325:6:55"},"referencedDeclaration":9632,"src":"1325:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9726,"mutability":"mutable","name":"to","nameLocation":"1347:2:55","nodeType":"VariableDeclaration","scope":9744,"src":"1339:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9725,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9728,"mutability":"mutable","name":"value","nameLocation":"1359:5:55","nodeType":"VariableDeclaration","scope":9744,"src":"1351:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9727,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:55"},"returnParameters":{"id":9730,"nodeType":"ParameterList","parameters":[],"src":"1375:0:55"},"scope":9984,"src":"1303:160:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9770,"nodeType":"Block","src":"1792:98:55","statements":[{"expression":{"arguments":[{"id":9758,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9748,"src":"1822:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":9761,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9748,"src":"1844:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:55","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":9631,"src":"1844:18:55","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":9763,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9750,"src":"1865:4:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9764,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9752,"src":"1871:2:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9765,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9754,"src":"1875:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9766,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":9759,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9760,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:55","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:55","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9757,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9934,"src":"1802:19:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":9768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9769,"nodeType":"ExpressionStatement","src":"1802:81:55"}]},"documentation":{"id":9745,"nodeType":"StructuredDocumentation","src":"1469:228:55","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":9771,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:55","nodeType":"FunctionDefinition","parameters":{"id":9755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9748,"mutability":"mutable","name":"token","nameLocation":"1735:5:55","nodeType":"VariableDeclaration","scope":9771,"src":"1728:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9747,"nodeType":"UserDefinedTypeName","pathNode":{"id":9746,"name":"IERC20","nameLocations":["1728:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1728:6:55"},"referencedDeclaration":9632,"src":"1728:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9750,"mutability":"mutable","name":"from","nameLocation":"1750:4:55","nodeType":"VariableDeclaration","scope":9771,"src":"1742:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9749,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9752,"mutability":"mutable","name":"to","nameLocation":"1764:2:55","nodeType":"VariableDeclaration","scope":9771,"src":"1756:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9751,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9754,"mutability":"mutable","name":"value","nameLocation":"1776:5:55","nodeType":"VariableDeclaration","scope":9771,"src":"1768:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9753,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:55"},"returnParameters":{"id":9756,"nodeType":"ParameterList","parameters":[],"src":"1792:0:55"},"scope":9984,"src":"1702:188:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9801,"nodeType":"Block","src":"2167:139:55","statements":[{"assignments":[9783],"declarations":[{"constant":false,"id":9783,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:55","nodeType":"VariableDeclaration","scope":9801,"src":"2177:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9782,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9792,"initialValue":{"arguments":[{"arguments":[{"id":9788,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:55","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$9984","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$9984","typeString":"library SafeERC20"}],"id":9787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9786,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:55","typeDescriptions":{}}},"id":9789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9790,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9777,"src":"2231:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9784,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9775,"src":"2200:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:55","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":9609,"src":"2200:15:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":9791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:55"},{"expression":{"arguments":[{"id":9794,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9775,"src":"2262:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":9795,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9777,"src":"2269:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9796,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9783,"src":"2278:12:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9797,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9779,"src":"2293:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9793,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"2249:12:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":9799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9800,"nodeType":"ExpressionStatement","src":"2249:50:55"}]},"documentation":{"id":9772,"nodeType":"StructuredDocumentation","src":"1896:180:55","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":9802,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:55","nodeType":"FunctionDefinition","parameters":{"id":9780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9775,"mutability":"mutable","name":"token","nameLocation":"2119:5:55","nodeType":"VariableDeclaration","scope":9802,"src":"2112:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9774,"nodeType":"UserDefinedTypeName","pathNode":{"id":9773,"name":"IERC20","nameLocations":["2112:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2112:6:55"},"referencedDeclaration":9632,"src":"2112:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9777,"mutability":"mutable","name":"spender","nameLocation":"2134:7:55","nodeType":"VariableDeclaration","scope":9802,"src":"2126:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9776,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9779,"mutability":"mutable","name":"value","nameLocation":"2151:5:55","nodeType":"VariableDeclaration","scope":9802,"src":"2143:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9778,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:55"},"returnParameters":{"id":9781,"nodeType":"ParameterList","parameters":[],"src":"2167:0:55"},"scope":9984,"src":"2081:225:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9844,"nodeType":"Block","src":"2607:370:55","statements":[{"id":9843,"nodeType":"UncheckedBlock","src":"2617:354:55","statements":[{"assignments":[9814],"declarations":[{"constant":false,"id":9814,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:55","nodeType":"VariableDeclaration","scope":9843,"src":"2641:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9813,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9823,"initialValue":{"arguments":[{"arguments":[{"id":9819,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:55","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$9984","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$9984","typeString":"library SafeERC20"}],"id":9818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9817,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:55","typeDescriptions":{}}},"id":9820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9821,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9808,"src":"2699:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9815,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9806,"src":"2668:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:55","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":9609,"src":"2668:15:55","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":9822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:55"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9824,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9814,"src":"2725:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9825,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9810,"src":"2744:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9834,"nodeType":"IfStatement","src":"2721:160:55","trueBody":{"id":9833,"nodeType":"Block","src":"2763:118:55","statements":[{"errorCall":{"arguments":[{"id":9828,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9808,"src":"2821:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9829,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9814,"src":"2830:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9830,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9810,"src":"2848:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9827,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9720,"src":"2788:32:55","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":9831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9832,"nodeType":"RevertStatement","src":"2781:85:55"}]}},{"expression":{"arguments":[{"id":9836,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9806,"src":"2907:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":9837,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9808,"src":"2914:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9838,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9814,"src":"2923:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9839,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9810,"src":"2942:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9835,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"2894:12:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":9841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9842,"nodeType":"ExpressionStatement","src":"2894:66:55"}]}]},"documentation":{"id":9803,"nodeType":"StructuredDocumentation","src":"2312:192:55","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":9845,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:55","nodeType":"FunctionDefinition","parameters":{"id":9811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9806,"mutability":"mutable","name":"token","nameLocation":"2547:5:55","nodeType":"VariableDeclaration","scope":9845,"src":"2540:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9805,"nodeType":"UserDefinedTypeName","pathNode":{"id":9804,"name":"IERC20","nameLocations":["2540:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2540:6:55"},"referencedDeclaration":9632,"src":"2540:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9808,"mutability":"mutable","name":"spender","nameLocation":"2562:7:55","nodeType":"VariableDeclaration","scope":9845,"src":"2554:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9807,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9810,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:55","nodeType":"VariableDeclaration","scope":9845,"src":"2571:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9809,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:55"},"returnParameters":{"id":9812,"nodeType":"ParameterList","parameters":[],"src":"2607:0:55"},"scope":9984,"src":"2509:468:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9891,"nodeType":"Block","src":"3373:303:55","statements":[{"assignments":[9857],"declarations":[{"constant":false,"id":9857,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:55","nodeType":"VariableDeclaration","scope":9891,"src":"3383:25:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9856,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":9866,"initialValue":{"arguments":[{"expression":{"id":9860,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9849,"src":"3426:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:55","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":9619,"src":"3426:13:55","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":9862,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9851,"src":"3442:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9853,"src":"3451:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9864,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":9858,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:55","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:55","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:55"},{"condition":{"id":9871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:55","subExpression":{"arguments":[{"id":9868,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9849,"src":"3498:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":9869,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9857,"src":"3505:12:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9867,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9983,"src":"3474:23:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":9870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9890,"nodeType":"IfStatement","src":"3469:201:55","trueBody":{"id":9889,"nodeType":"Block","src":"3520:150:55","statements":[{"expression":{"arguments":[{"id":9873,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9849,"src":"3554:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":9876,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9849,"src":"3576:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":9877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:55","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":9619,"src":"3576:13:55","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":9878,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9851,"src":"3592:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":9879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9880,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":9874,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:55","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:55","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9872,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9934,"src":"3534:19:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":9882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9883,"nodeType":"ExpressionStatement","src":"3534:71:55"},{"expression":{"arguments":[{"id":9885,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9849,"src":"3639:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":9886,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9857,"src":"3646:12:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9884,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9934,"src":"3619:19:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":9887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9888,"nodeType":"ExpressionStatement","src":"3619:40:55"}]}}]},"documentation":{"id":9846,"nodeType":"StructuredDocumentation","src":"2983:308:55","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":9892,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:55","nodeType":"FunctionDefinition","parameters":{"id":9854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9849,"mutability":"mutable","name":"token","nameLocation":"3325:5:55","nodeType":"VariableDeclaration","scope":9892,"src":"3318:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9848,"nodeType":"UserDefinedTypeName","pathNode":{"id":9847,"name":"IERC20","nameLocations":["3318:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3318:6:55"},"referencedDeclaration":9632,"src":"3318:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9851,"mutability":"mutable","name":"spender","nameLocation":"3340:7:55","nodeType":"VariableDeclaration","scope":9892,"src":"3332:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9850,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9853,"mutability":"mutable","name":"value","nameLocation":"3357:5:55","nodeType":"VariableDeclaration","scope":9892,"src":"3349:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9852,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:55"},"returnParameters":{"id":9855,"nodeType":"ParameterList","parameters":[],"src":"3373:0:55"},"scope":9984,"src":"3296:380:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9933,"nodeType":"Block","src":"4129:559:55","statements":[{"assignments":[9902],"declarations":[{"constant":false,"id":9902,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:55","nodeType":"VariableDeclaration","scope":9933,"src":"4478:23:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9901,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":9910,"initialValue":{"arguments":[{"id":9908,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9898,"src":"4532:4:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":9905,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9896,"src":"4512:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":9904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9903,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:55","typeDescriptions":{}}},"id":9906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:55","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":10058,"src":"4504:27:55","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":9909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:55"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9911,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9902,"src":"4551:10:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:55","memberName":"length","nodeType":"MemberAccess","src":"4551:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":9913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":9922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:55","subExpression":{"arguments":[{"id":9917,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9902,"src":"4589:10:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":9919,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:55","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":9918,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:55","typeDescriptions":{}}}],"id":9920,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:55","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":9915,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:55","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:55","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":9921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9932,"nodeType":"IfStatement","src":"4547:135:55","trueBody":{"id":9931,"nodeType":"Block","src":"4610:72:55","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":9927,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9896,"src":"4664:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":9926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9925,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:55","typeDescriptions":{}}},"id":9928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9924,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9711,"src":"4631:24:55","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9930,"nodeType":"RevertStatement","src":"4624:47:55"}]}}]},"documentation":{"id":9893,"nodeType":"StructuredDocumentation","src":"3682:372:55","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":9934,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:55","nodeType":"FunctionDefinition","parameters":{"id":9899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9896,"mutability":"mutable","name":"token","nameLocation":"4095:5:55","nodeType":"VariableDeclaration","scope":9934,"src":"4088:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9895,"nodeType":"UserDefinedTypeName","pathNode":{"id":9894,"name":"IERC20","nameLocations":["4088:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4088:6:55"},"referencedDeclaration":9632,"src":"4088:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9898,"mutability":"mutable","name":"data","nameLocation":"4115:4:55","nodeType":"VariableDeclaration","scope":9934,"src":"4102:17:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9897,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:55"},"returnParameters":{"id":9900,"nodeType":"ParameterList","parameters":[],"src":"4129:0:55"},"scope":9984,"src":"4059:629:55","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9982,"nodeType":"Block","src":"5278:489:55","statements":[{"assignments":[9946,9948],"declarations":[{"constant":false,"id":9946,"mutability":"mutable","name":"success","nameLocation":"5579:7:55","nodeType":"VariableDeclaration","scope":9982,"src":"5574:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9945,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9948,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:55","nodeType":"VariableDeclaration","scope":9982,"src":"5588:23:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9947,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":9956,"initialValue":{"arguments":[{"id":9954,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9940,"src":"5635:4:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":9951,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9938,"src":"5623:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":9950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9949,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:55","typeDescriptions":{}}},"id":9952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:55","memberName":"call","nodeType":"MemberAccess","src":"5615:19:55","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":9955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:55"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9957,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9946,"src":"5657:7:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9958,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9948,"src":"5669:10:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:55","memberName":"length","nodeType":"MemberAccess","src":"5669:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":9964,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9948,"src":"5706:10:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":9966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:55","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":9965,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:55","typeDescriptions":{}}}],"id":9967,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:55","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":9962,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:55","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:55","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":9968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":9970,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":9974,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9938,"src":"5738:5:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":9973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9972,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:55","typeDescriptions":{}}},"id":9975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:55","memberName":"code","nodeType":"MemberAccess","src":"5730:19:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:55","memberName":"length","nodeType":"MemberAccess","src":"5730:26:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9944,"id":9981,"nodeType":"Return","src":"5650:110:55"}]},"documentation":{"id":9935,"nodeType":"StructuredDocumentation","src":"4694:490:55","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":9983,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:55","nodeType":"FunctionDefinition","parameters":{"id":9941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9938,"mutability":"mutable","name":"token","nameLocation":"5229:5:55","nodeType":"VariableDeclaration","scope":9983,"src":"5222:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":9937,"nodeType":"UserDefinedTypeName","pathNode":{"id":9936,"name":"IERC20","nameLocations":["5222:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5222:6:55"},"referencedDeclaration":9632,"src":"5222:6:55","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":9940,"mutability":"mutable","name":"data","nameLocation":"5249:4:55","nodeType":"VariableDeclaration","scope":9983,"src":"5236:17:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9939,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:55"},"returnParameters":{"id":9944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9983,"src":"5272:4:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9942,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:55"},"scope":9984,"src":"5189:578:55","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":9985,"src":"751:5018:55","usedErrors":[9711,9720],"usedEvents":[]}],"src":"115:5655:55"},"id":55},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[10237]},"id":10238,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9986,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:56"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":9987,"nodeType":"StructuredDocumentation","src":"127:67:56","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":10237,"linearizedBaseContracts":[10237],"name":"Address","nameLocation":"203:7:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9988,"nodeType":"StructuredDocumentation","src":"217:94:56","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":9992,"name":"AddressInsufficientBalance","nameLocation":"322:26:56","nodeType":"ErrorDefinition","parameters":{"id":9991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9990,"mutability":"mutable","name":"account","nameLocation":"357:7:56","nodeType":"VariableDeclaration","scope":9992,"src":"349:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9989,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:56"},"src":"316:50:56"},{"documentation":{"id":9993,"nodeType":"StructuredDocumentation","src":"372:75:56","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":9997,"name":"AddressEmptyCode","nameLocation":"458:16:56","nodeType":"ErrorDefinition","parameters":{"id":9996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9995,"mutability":"mutable","name":"target","nameLocation":"483:6:56","nodeType":"VariableDeclaration","scope":9997,"src":"475:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9994,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:56"},"src":"452:39:56"},{"documentation":{"id":9998,"nodeType":"StructuredDocumentation","src":"497:89:56","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":10000,"name":"FailedInnerCall","nameLocation":"597:15:56","nodeType":"ErrorDefinition","parameters":{"id":9999,"nodeType":"ParameterList","parameters":[],"src":"612:2:56"},"src":"591:24:56"},{"body":{"id":10040,"nodeType":"Block","src":"1602:260:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":10010,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}],"id":10009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10008,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:56","typeDescriptions":{}}},"id":10011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:56","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10013,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10005,"src":"1640:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10023,"nodeType":"IfStatement","src":"1612:109:56","trueBody":{"id":10022,"nodeType":"Block","src":"1648:73:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10018,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}],"id":10017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10016,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:56","typeDescriptions":{}}},"id":10019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10015,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9992,"src":"1669:26:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10021,"nodeType":"RevertStatement","src":"1662:48:56"}]}},{"assignments":[10025,null],"declarations":[{"constant":false,"id":10025,"mutability":"mutable","name":"success","nameLocation":"1737:7:56","nodeType":"VariableDeclaration","scope":10040,"src":"1732:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10024,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":10032,"initialValue":{"arguments":[{"hexValue":"","id":10030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:56","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":10026,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10003,"src":"1750:9:56","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":10027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:56","memberName":"call","nodeType":"MemberAccess","src":"1750:14:56","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":10029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":10028,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10005,"src":"1772:6:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:56","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":10031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:56"},{"condition":{"id":10034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:56","subExpression":{"id":10033,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10025,"src":"1798:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10039,"nodeType":"IfStatement","src":"1793:63:56","trueBody":{"id":10038,"nodeType":"Block","src":"1807:49:56","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10035,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10000,"src":"1828:15:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10037,"nodeType":"RevertStatement","src":"1821:24:56"}]}}]},"documentation":{"id":10001,"nodeType":"StructuredDocumentation","src":"621:905:56","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":10041,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:56","nodeType":"FunctionDefinition","parameters":{"id":10006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10003,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:56","nodeType":"VariableDeclaration","scope":10041,"src":"1550:25:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":10002,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:56","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":10005,"mutability":"mutable","name":"amount","nameLocation":"1585:6:56","nodeType":"VariableDeclaration","scope":10041,"src":"1577:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10004,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:56"},"returnParameters":{"id":10007,"nodeType":"ParameterList","parameters":[],"src":"1602:0:56"},"scope":10237,"src":"1531:331:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10057,"nodeType":"Block","src":"2794:62:56","statements":[{"expression":{"arguments":[{"id":10052,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10044,"src":"2833:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10053,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10046,"src":"2841:4:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":10054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10051,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"2811:21:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":10055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10050,"id":10056,"nodeType":"Return","src":"2804:45:56"}]},"documentation":{"id":10042,"nodeType":"StructuredDocumentation","src":"1868:832:56","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":10058,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:56","nodeType":"FunctionDefinition","parameters":{"id":10047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10044,"mutability":"mutable","name":"target","nameLocation":"2735:6:56","nodeType":"VariableDeclaration","scope":10058,"src":"2727:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10043,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10046,"mutability":"mutable","name":"data","nameLocation":"2756:4:56","nodeType":"VariableDeclaration","scope":10058,"src":"2743:17:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10045,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:56"},"returnParameters":{"id":10050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10058,"src":"2780:12:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10048,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:56"},"scope":10237,"src":"2705:151:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10103,"nodeType":"Block","src":"3293:279:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":10072,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}],"id":10071,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10070,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:56","typeDescriptions":{}}},"id":10073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:56","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10075,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10065,"src":"3331:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10085,"nodeType":"IfStatement","src":"3303:108:56","trueBody":{"id":10084,"nodeType":"Block","src":"3338:73:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10080,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:56","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$10237","typeString":"library Address"}],"id":10079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10078,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:56","typeDescriptions":{}}},"id":10081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10077,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9992,"src":"3359:26:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10083,"nodeType":"RevertStatement","src":"3352:48:56"}]}},{"assignments":[10087,10089],"declarations":[{"constant":false,"id":10087,"mutability":"mutable","name":"success","nameLocation":"3426:7:56","nodeType":"VariableDeclaration","scope":10103,"src":"3421:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10086,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10089,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:56","nodeType":"VariableDeclaration","scope":10103,"src":"3435:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10088,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10096,"initialValue":{"arguments":[{"id":10094,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10063,"src":"3488:4:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10090,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10061,"src":"3462:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:56","memberName":"call","nodeType":"MemberAccess","src":"3462:11:56","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":10093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":10092,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10065,"src":"3481:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:56","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":10095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:56"},{"expression":{"arguments":[{"id":10098,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10061,"src":"3537:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10099,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10087,"src":"3545:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":10100,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"3554:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10097,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10196,"src":"3510:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":10101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10069,"id":10102,"nodeType":"Return","src":"3503:62:56"}]},"documentation":{"id":10059,"nodeType":"StructuredDocumentation","src":"2862:313:56","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":10104,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:56","nodeType":"FunctionDefinition","parameters":{"id":10066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10061,"mutability":"mutable","name":"target","nameLocation":"3219:6:56","nodeType":"VariableDeclaration","scope":10104,"src":"3211:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10060,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10063,"mutability":"mutable","name":"data","nameLocation":"3240:4:56","nodeType":"VariableDeclaration","scope":10104,"src":"3227:17:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10062,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10065,"mutability":"mutable","name":"value","nameLocation":"3254:5:56","nodeType":"VariableDeclaration","scope":10104,"src":"3246:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10064,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:56"},"returnParameters":{"id":10069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10104,"src":"3279:12:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10067,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:56"},"scope":10237,"src":"3180:392:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10129,"nodeType":"Block","src":"3811:154:56","statements":[{"assignments":[10115,10117],"declarations":[{"constant":false,"id":10115,"mutability":"mutable","name":"success","nameLocation":"3827:7:56","nodeType":"VariableDeclaration","scope":10129,"src":"3822:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10114,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10117,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:56","nodeType":"VariableDeclaration","scope":10129,"src":"3836:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10116,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10122,"initialValue":{"arguments":[{"id":10120,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10109,"src":"3881:4:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10118,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10107,"src":"3863:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:56","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:56","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":10121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:56"},{"expression":{"arguments":[{"id":10124,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10107,"src":"3930:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10125,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10115,"src":"3938:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":10126,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10117,"src":"3947:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10123,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10196,"src":"3903:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":10127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10113,"id":10128,"nodeType":"Return","src":"3896:62:56"}]},"documentation":{"id":10105,"nodeType":"StructuredDocumentation","src":"3578:128:56","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":10130,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:56","nodeType":"FunctionDefinition","parameters":{"id":10110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10107,"mutability":"mutable","name":"target","nameLocation":"3747:6:56","nodeType":"VariableDeclaration","scope":10130,"src":"3739:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10106,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10109,"mutability":"mutable","name":"data","nameLocation":"3768:4:56","nodeType":"VariableDeclaration","scope":10130,"src":"3755:17:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10108,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:56"},"returnParameters":{"id":10113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10130,"src":"3797:12:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10111,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:56"},"scope":10237,"src":"3711:254:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10155,"nodeType":"Block","src":"4203:156:56","statements":[{"assignments":[10141,10143],"declarations":[{"constant":false,"id":10141,"mutability":"mutable","name":"success","nameLocation":"4219:7:56","nodeType":"VariableDeclaration","scope":10155,"src":"4214:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10140,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10143,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:56","nodeType":"VariableDeclaration","scope":10155,"src":"4228:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10142,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10148,"initialValue":{"arguments":[{"id":10146,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10135,"src":"4275:4:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10144,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10133,"src":"4255:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:56","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:56","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":10147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:56"},{"expression":{"arguments":[{"id":10150,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10133,"src":"4324:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10151,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10141,"src":"4332:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":10152,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10143,"src":"4341:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10149,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10196,"src":"4297:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":10153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10139,"id":10154,"nodeType":"Return","src":"4290:62:56"}]},"documentation":{"id":10131,"nodeType":"StructuredDocumentation","src":"3971:130:56","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":10156,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:56","nodeType":"FunctionDefinition","parameters":{"id":10136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10133,"mutability":"mutable","name":"target","nameLocation":"4144:6:56","nodeType":"VariableDeclaration","scope":10156,"src":"4136:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10132,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10135,"mutability":"mutable","name":"data","nameLocation":"4165:4:56","nodeType":"VariableDeclaration","scope":10156,"src":"4152:17:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10134,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:56"},"returnParameters":{"id":10139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10156,"src":"4189:12:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10137,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:56"},"scope":10237,"src":"4106:253:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10195,"nodeType":"Block","src":"4783:424:56","statements":[{"condition":{"id":10169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:56","subExpression":{"id":10168,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10161,"src":"4798:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10193,"nodeType":"Block","src":"4857:344:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10175,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10163,"src":"5045:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:56","memberName":"length","nodeType":"MemberAccess","src":"5045:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10179,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10159,"src":"5071:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:56","memberName":"code","nodeType":"MemberAccess","src":"5071:11:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:56","memberName":"length","nodeType":"MemberAccess","src":"5071:18:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10190,"nodeType":"IfStatement","src":"5041:119:56","trueBody":{"id":10189,"nodeType":"Block","src":"5096:64:56","statements":[{"errorCall":{"arguments":[{"id":10186,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10159,"src":"5138:6:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10185,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9997,"src":"5121:16:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10188,"nodeType":"RevertStatement","src":"5114:31:56"}]}},{"expression":{"id":10191,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10163,"src":"5180:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10167,"id":10192,"nodeType":"Return","src":"5173:17:56"}]},"id":10194,"nodeType":"IfStatement","src":"4793:408:56","trueBody":{"id":10174,"nodeType":"Block","src":"4807:44:56","statements":[{"expression":{"arguments":[{"id":10171,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10163,"src":"4829:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10170,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10236,"src":"4821:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":10172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10173,"nodeType":"ExpressionStatement","src":"4821:19:56"}]}}]},"documentation":{"id":10157,"nodeType":"StructuredDocumentation","src":"4365:255:56","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":10196,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:56","nodeType":"FunctionDefinition","parameters":{"id":10164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10159,"mutability":"mutable","name":"target","nameLocation":"4678:6:56","nodeType":"VariableDeclaration","scope":10196,"src":"4670:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10158,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10161,"mutability":"mutable","name":"success","nameLocation":"4699:7:56","nodeType":"VariableDeclaration","scope":10196,"src":"4694:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10160,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10163,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:56","nodeType":"VariableDeclaration","scope":10196,"src":"4716:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10162,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:56"},"returnParameters":{"id":10167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10196,"src":"4769:12:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10165,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:56"},"scope":10237,"src":"4625:582:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10217,"nodeType":"Block","src":"5509:122:56","statements":[{"condition":{"id":10207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:56","subExpression":{"id":10206,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10199,"src":"5524:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10215,"nodeType":"Block","src":"5583:42:56","statements":[{"expression":{"id":10213,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10201,"src":"5604:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10205,"id":10214,"nodeType":"Return","src":"5597:17:56"}]},"id":10216,"nodeType":"IfStatement","src":"5519:106:56","trueBody":{"id":10212,"nodeType":"Block","src":"5533:44:56","statements":[{"expression":{"arguments":[{"id":10209,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10201,"src":"5555:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10208,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10236,"src":"5547:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":10210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10211,"nodeType":"ExpressionStatement","src":"5547:19:56"}]}}]},"documentation":{"id":10197,"nodeType":"StructuredDocumentation","src":"5213:189:56","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":10218,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:56","nodeType":"FunctionDefinition","parameters":{"id":10202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10199,"mutability":"mutable","name":"success","nameLocation":"5438:7:56","nodeType":"VariableDeclaration","scope":10218,"src":"5433:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10198,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10201,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:56","nodeType":"VariableDeclaration","scope":10218,"src":"5447:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10200,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:56"},"returnParameters":{"id":10205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10204,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10218,"src":"5495:12:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10203,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:56"},"scope":10237,"src":"5407:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10235,"nodeType":"Block","src":"5798:461:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10224,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10221,"src":"5874:10:56","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:56","memberName":"length","nodeType":"MemberAccess","src":"5874:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":10226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10233,"nodeType":"Block","src":"6204:49:56","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10230,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10000,"src":"6225:15:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10232,"nodeType":"RevertStatement","src":"6218:24:56"}]},"id":10234,"nodeType":"IfStatement","src":"5870:383:56","trueBody":{"id":10229,"nodeType":"Block","src":"5897:301:56","statements":[{"AST":{"nativeSrc":"6055:133:56","nodeType":"YulBlock","src":"6055:133:56","statements":[{"nativeSrc":"6073:40:56","nodeType":"YulVariableDeclaration","src":"6073:40:56","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:56","nodeType":"YulIdentifier","src":"6102:10:56"}],"functionName":{"name":"mload","nativeSrc":"6096:5:56","nodeType":"YulIdentifier","src":"6096:5:56"},"nativeSrc":"6096:17:56","nodeType":"YulFunctionCall","src":"6096:17:56"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:56","nodeType":"YulTypedName","src":"6077:15:56","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:56","nodeType":"YulLiteral","src":"6141:2:56","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:56","nodeType":"YulIdentifier","src":"6145:10:56"}],"functionName":{"name":"add","nativeSrc":"6137:3:56","nodeType":"YulIdentifier","src":"6137:3:56"},"nativeSrc":"6137:19:56","nodeType":"YulFunctionCall","src":"6137:19:56"},{"name":"returndata_size","nativeSrc":"6158:15:56","nodeType":"YulIdentifier","src":"6158:15:56"}],"functionName":{"name":"revert","nativeSrc":"6130:6:56","nodeType":"YulIdentifier","src":"6130:6:56"},"nativeSrc":"6130:44:56","nodeType":"YulFunctionCall","src":"6130:44:56"},"nativeSrc":"6130:44:56","nodeType":"YulExpressionStatement","src":"6130:44:56"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10221,"isOffset":false,"isSlot":false,"src":"6102:10:56","valueSize":1},{"declaration":10221,"isOffset":false,"isSlot":false,"src":"6145:10:56","valueSize":1}],"id":10228,"nodeType":"InlineAssembly","src":"6046:142:56"}]}}]},"documentation":{"id":10219,"nodeType":"StructuredDocumentation","src":"5637:101:56","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":10236,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:56","nodeType":"FunctionDefinition","parameters":{"id":10222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10221,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:56","nodeType":"VariableDeclaration","scope":10236,"src":"5760:23:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10220,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:56","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:56"},"returnParameters":{"id":10223,"nodeType":"ParameterList","parameters":[],"src":"5798:0:56"},"scope":10237,"src":"5743:516:56","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":10238,"src":"195:6066:56","usedErrors":[9992,9997,10000],"usedEvents":[]}],"src":"101:6161:56"},"id":56},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[10259]},"id":10260,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10239,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:57"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":10240,"nodeType":"StructuredDocumentation","src":"127:496:57","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":10259,"linearizedBaseContracts":[10259],"name":"Context","nameLocation":"642:7:57","nodeType":"ContractDefinition","nodes":[{"body":{"id":10248,"nodeType":"Block","src":"718:34:57","statements":[{"expression":{"expression":{"id":10245,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:57","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:57","memberName":"sender","nodeType":"MemberAccess","src":"735:10:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10244,"id":10247,"nodeType":"Return","src":"728:17:57"}]},"id":10249,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:57","nodeType":"FunctionDefinition","parameters":{"id":10241,"nodeType":"ParameterList","parameters":[],"src":"675:2:57"},"returnParameters":{"id":10244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10243,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10249,"src":"709:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10242,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:57"},"scope":10259,"src":"656:96:57","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":10257,"nodeType":"Block","src":"825:32:57","statements":[{"expression":{"expression":{"id":10254,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:57","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:57","memberName":"data","nodeType":"MemberAccess","src":"842:8:57","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":10253,"id":10256,"nodeType":"Return","src":"835:15:57"}]},"id":10258,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:57","nodeType":"FunctionDefinition","parameters":{"id":10250,"nodeType":"ParameterList","parameters":[],"src":"775:2:57"},"returnParameters":{"id":10253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10252,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10258,"src":"809:14:57","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":10251,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:57","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:57"},"scope":10259,"src":"758:99:57","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":10260,"src":"624:235:57","usedErrors":[],"usedEvents":[]}],"src":"101:759:57"},"id":57},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[10271]},"id":10272,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10261,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:58"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":10262,"nodeType":"StructuredDocumentation","src":"141:279:58","text":" @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":10271,"linearizedBaseContracts":[10271],"name":"IERC165","nameLocation":"431:7:58","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10263,"nodeType":"StructuredDocumentation","src":"445:340:58","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":10270,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"799:17:58","nodeType":"FunctionDefinition","parameters":{"id":10266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10265,"mutability":"mutable","name":"interfaceId","nameLocation":"824:11:58","nodeType":"VariableDeclaration","scope":10270,"src":"817:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":10264,"name":"bytes4","nodeType":"ElementaryTypeName","src":"817:6:58","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"816:20:58"},"returnParameters":{"id":10269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10270,"src":"860:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10267,"name":"bool","nodeType":"ElementaryTypeName","src":"860:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"859:6:58"},"scope":10271,"src":"790:76:58","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10272,"src":"421:447:58","usedErrors":[],"usedEvents":[]}],"src":"115:754:58"},"id":58},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[12026]},"id":12027,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10273,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:59"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":10274,"nodeType":"StructuredDocumentation","src":"218:545:59","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":12026,"linearizedBaseContracts":[12026],"name":"SafeCast","nameLocation":"772:8:59","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10275,"nodeType":"StructuredDocumentation","src":"787:68:59","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":10281,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:59","nodeType":"ErrorDefinition","parameters":{"id":10280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10277,"mutability":"mutable","name":"bits","nameLocation":"903:4:59","nodeType":"VariableDeclaration","scope":10281,"src":"897:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10276,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":10279,"mutability":"mutable","name":"value","nameLocation":"917:5:59","nodeType":"VariableDeclaration","scope":10281,"src":"909:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10278,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:59"},"src":"860:64:59"},{"documentation":{"id":10282,"nodeType":"StructuredDocumentation","src":"930:75:59","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":10286,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:59","nodeType":"ErrorDefinition","parameters":{"id":10285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10284,"mutability":"mutable","name":"value","nameLocation":"1051:5:59","nodeType":"VariableDeclaration","scope":10286,"src":"1044:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10283,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:59"},"src":"1010:48:59"},{"documentation":{"id":10287,"nodeType":"StructuredDocumentation","src":"1064:67:59","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":10293,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:59","nodeType":"ErrorDefinition","parameters":{"id":10292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10289,"mutability":"mutable","name":"bits","nameLocation":"1178:4:59","nodeType":"VariableDeclaration","scope":10293,"src":"1172:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10288,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":10291,"mutability":"mutable","name":"value","nameLocation":"1191:5:59","nodeType":"VariableDeclaration","scope":10293,"src":"1184:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10290,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:59"},"src":"1136:62:59"},{"documentation":{"id":10294,"nodeType":"StructuredDocumentation","src":"1204:75:59","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":10298,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:59","nodeType":"ErrorDefinition","parameters":{"id":10297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10296,"mutability":"mutable","name":"value","nameLocation":"1326:5:59","nodeType":"VariableDeclaration","scope":10298,"src":"1318:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10295,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:59"},"src":"1284:49:59"},{"body":{"id":10325,"nodeType":"Block","src":"1690:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10306,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10301,"src":"1704:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":10308,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":10307,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":10311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:59","memberName":"max","nodeType":"MemberAccess","src":"1712:17:59","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10319,"nodeType":"IfStatement","src":"1700:105:59","trueBody":{"id":10318,"nodeType":"Block","src":"1731:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":10314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:59","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":10315,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10301,"src":"1788:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10313,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"1752:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10317,"nodeType":"RevertStatement","src":"1745:49:59"}]}},{"expression":{"arguments":[{"id":10322,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10301,"src":"1829:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":10320,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:59","typeDescriptions":{}}},"id":10323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":10305,"id":10324,"nodeType":"Return","src":"1814:21:59"}]},"documentation":{"id":10299,"nodeType":"StructuredDocumentation","src":"1339:280:59","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":10326,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:59","nodeType":"FunctionDefinition","parameters":{"id":10302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10301,"mutability":"mutable","name":"value","nameLocation":"1651:5:59","nodeType":"VariableDeclaration","scope":10326,"src":"1643:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10300,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:59"},"returnParameters":{"id":10305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10326,"src":"1681:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":10303,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:59","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:59"},"scope":12026,"src":"1624:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10353,"nodeType":"Block","src":"2199:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10329,"src":"2213:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":10336,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":10335,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":10339,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:59","memberName":"max","nodeType":"MemberAccess","src":"2221:17:59","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10347,"nodeType":"IfStatement","src":"2209:105:59","trueBody":{"id":10346,"nodeType":"Block","src":"2240:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":10342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:59","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":10343,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10329,"src":"2297:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10341,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"2261:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10345,"nodeType":"RevertStatement","src":"2254:49:59"}]}},{"expression":{"arguments":[{"id":10350,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10329,"src":"2338:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":10348,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:59","typeDescriptions":{}}},"id":10351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":10333,"id":10352,"nodeType":"Return","src":"2323:21:59"}]},"documentation":{"id":10327,"nodeType":"StructuredDocumentation","src":"1848:280:59","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":10354,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:59","nodeType":"FunctionDefinition","parameters":{"id":10330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10329,"mutability":"mutable","name":"value","nameLocation":"2160:5:59","nodeType":"VariableDeclaration","scope":10354,"src":"2152:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10328,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:59"},"returnParameters":{"id":10333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10332,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10354,"src":"2190:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":10331,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:59","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:59"},"scope":12026,"src":"2133:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10381,"nodeType":"Block","src":"2708:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10357,"src":"2722:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":10364,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":10363,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":10367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:59","memberName":"max","nodeType":"MemberAccess","src":"2730:17:59","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10375,"nodeType":"IfStatement","src":"2718:105:59","trueBody":{"id":10374,"nodeType":"Block","src":"2749:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":10370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:59","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":10371,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10357,"src":"2806:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10369,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"2770:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10373,"nodeType":"RevertStatement","src":"2763:49:59"}]}},{"expression":{"arguments":[{"id":10378,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10357,"src":"2847:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":10376,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:59","typeDescriptions":{}}},"id":10379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":10361,"id":10380,"nodeType":"Return","src":"2832:21:59"}]},"documentation":{"id":10355,"nodeType":"StructuredDocumentation","src":"2357:280:59","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":10382,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:59","nodeType":"FunctionDefinition","parameters":{"id":10358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10357,"mutability":"mutable","name":"value","nameLocation":"2669:5:59","nodeType":"VariableDeclaration","scope":10382,"src":"2661:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10356,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:59"},"returnParameters":{"id":10361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10382,"src":"2699:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":10359,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:59","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:59"},"scope":12026,"src":"2642:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10409,"nodeType":"Block","src":"3217:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10390,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"3231:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":10392,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":10391,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":10395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:59","memberName":"max","nodeType":"MemberAccess","src":"3239:17:59","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10403,"nodeType":"IfStatement","src":"3227:105:59","trueBody":{"id":10402,"nodeType":"Block","src":"3258:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":10398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:59","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":10399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"3315:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10397,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"3279:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10401,"nodeType":"RevertStatement","src":"3272:49:59"}]}},{"expression":{"arguments":[{"id":10406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10385,"src":"3356:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":10404,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:59","typeDescriptions":{}}},"id":10407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":10389,"id":10408,"nodeType":"Return","src":"3341:21:59"}]},"documentation":{"id":10383,"nodeType":"StructuredDocumentation","src":"2866:280:59","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":10410,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:59","nodeType":"FunctionDefinition","parameters":{"id":10386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10385,"mutability":"mutable","name":"value","nameLocation":"3178:5:59","nodeType":"VariableDeclaration","scope":10410,"src":"3170:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10384,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:59"},"returnParameters":{"id":10389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10388,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10410,"src":"3208:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":10387,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:59","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:59"},"scope":12026,"src":"3151:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10437,"nodeType":"Block","src":"3726:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10418,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10413,"src":"3740:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":10420,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":10419,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":10423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:59","memberName":"max","nodeType":"MemberAccess","src":"3748:17:59","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10431,"nodeType":"IfStatement","src":"3736:105:59","trueBody":{"id":10430,"nodeType":"Block","src":"3767:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":10426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:59","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":10427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10413,"src":"3824:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10425,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"3788:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10429,"nodeType":"RevertStatement","src":"3781:49:59"}]}},{"expression":{"arguments":[{"id":10434,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10413,"src":"3865:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":10432,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:59","typeDescriptions":{}}},"id":10435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":10417,"id":10436,"nodeType":"Return","src":"3850:21:59"}]},"documentation":{"id":10411,"nodeType":"StructuredDocumentation","src":"3375:280:59","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":10438,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:59","nodeType":"FunctionDefinition","parameters":{"id":10414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10413,"mutability":"mutable","name":"value","nameLocation":"3687:5:59","nodeType":"VariableDeclaration","scope":10438,"src":"3679:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10412,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:59"},"returnParameters":{"id":10417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10438,"src":"3717:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":10415,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:59","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:59"},"scope":12026,"src":"3660:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10465,"nodeType":"Block","src":"4235:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10446,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10441,"src":"4249:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":10448,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":10447,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":10451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:59","memberName":"max","nodeType":"MemberAccess","src":"4257:17:59","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10459,"nodeType":"IfStatement","src":"4245:105:59","trueBody":{"id":10458,"nodeType":"Block","src":"4276:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":10454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:59","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":10455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10441,"src":"4333:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10453,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"4297:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10457,"nodeType":"RevertStatement","src":"4290:49:59"}]}},{"expression":{"arguments":[{"id":10462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10441,"src":"4374:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":10460,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:59","typeDescriptions":{}}},"id":10463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":10445,"id":10464,"nodeType":"Return","src":"4359:21:59"}]},"documentation":{"id":10439,"nodeType":"StructuredDocumentation","src":"3884:280:59","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":10466,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:59","nodeType":"FunctionDefinition","parameters":{"id":10442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10441,"mutability":"mutable","name":"value","nameLocation":"4196:5:59","nodeType":"VariableDeclaration","scope":10466,"src":"4188:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10440,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:59"},"returnParameters":{"id":10445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10466,"src":"4226:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":10443,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:59","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:59"},"scope":12026,"src":"4169:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10493,"nodeType":"Block","src":"4744:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10474,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10469,"src":"4758:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":10476,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":10475,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":10479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:59","memberName":"max","nodeType":"MemberAccess","src":"4766:17:59","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10487,"nodeType":"IfStatement","src":"4754:105:59","trueBody":{"id":10486,"nodeType":"Block","src":"4785:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":10482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:59","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":10483,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10469,"src":"4842:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10481,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"4806:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10485,"nodeType":"RevertStatement","src":"4799:49:59"}]}},{"expression":{"arguments":[{"id":10490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10469,"src":"4883:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":10488,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:59","typeDescriptions":{}}},"id":10491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":10473,"id":10492,"nodeType":"Return","src":"4868:21:59"}]},"documentation":{"id":10467,"nodeType":"StructuredDocumentation","src":"4393:280:59","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":10494,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:59","nodeType":"FunctionDefinition","parameters":{"id":10470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10469,"mutability":"mutable","name":"value","nameLocation":"4705:5:59","nodeType":"VariableDeclaration","scope":10494,"src":"4697:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10468,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:59"},"returnParameters":{"id":10473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10472,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10494,"src":"4735:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":10471,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:59","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:59"},"scope":12026,"src":"4678:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10521,"nodeType":"Block","src":"5253:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10502,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10497,"src":"5267:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":10504,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":10503,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":10507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:59","memberName":"max","nodeType":"MemberAccess","src":"5275:17:59","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10515,"nodeType":"IfStatement","src":"5263:105:59","trueBody":{"id":10514,"nodeType":"Block","src":"5294:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":10510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:59","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":10511,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10497,"src":"5351:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10509,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"5315:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10513,"nodeType":"RevertStatement","src":"5308:49:59"}]}},{"expression":{"arguments":[{"id":10518,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10497,"src":"5392:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":10516,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:59","typeDescriptions":{}}},"id":10519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":10501,"id":10520,"nodeType":"Return","src":"5377:21:59"}]},"documentation":{"id":10495,"nodeType":"StructuredDocumentation","src":"4902:280:59","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":10522,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:59","nodeType":"FunctionDefinition","parameters":{"id":10498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10497,"mutability":"mutable","name":"value","nameLocation":"5214:5:59","nodeType":"VariableDeclaration","scope":10522,"src":"5206:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10496,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:59"},"returnParameters":{"id":10501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10522,"src":"5244:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":10499,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:59","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:59"},"scope":12026,"src":"5187:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10549,"nodeType":"Block","src":"5762:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10530,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10525,"src":"5776:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":10532,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":10531,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":10535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:59","memberName":"max","nodeType":"MemberAccess","src":"5784:17:59","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10543,"nodeType":"IfStatement","src":"5772:105:59","trueBody":{"id":10542,"nodeType":"Block","src":"5803:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":10538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:59","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":10539,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10525,"src":"5860:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10537,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"5824:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10541,"nodeType":"RevertStatement","src":"5817:49:59"}]}},{"expression":{"arguments":[{"id":10546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10525,"src":"5901:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":10544,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:59","typeDescriptions":{}}},"id":10547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":10529,"id":10548,"nodeType":"Return","src":"5886:21:59"}]},"documentation":{"id":10523,"nodeType":"StructuredDocumentation","src":"5411:280:59","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":10550,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:59","nodeType":"FunctionDefinition","parameters":{"id":10526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10525,"mutability":"mutable","name":"value","nameLocation":"5723:5:59","nodeType":"VariableDeclaration","scope":10550,"src":"5715:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10524,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:59"},"returnParameters":{"id":10529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10528,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10550,"src":"5753:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":10527,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:59","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:59"},"scope":12026,"src":"5696:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10577,"nodeType":"Block","src":"6271:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10558,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10553,"src":"6285:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":10560,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":10559,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":10563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:59","memberName":"max","nodeType":"MemberAccess","src":"6293:17:59","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10571,"nodeType":"IfStatement","src":"6281:105:59","trueBody":{"id":10570,"nodeType":"Block","src":"6312:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":10566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:59","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":10567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10553,"src":"6369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10565,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"6333:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10569,"nodeType":"RevertStatement","src":"6326:49:59"}]}},{"expression":{"arguments":[{"id":10574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10553,"src":"6410:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":10572,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:59","typeDescriptions":{}}},"id":10575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":10557,"id":10576,"nodeType":"Return","src":"6395:21:59"}]},"documentation":{"id":10551,"nodeType":"StructuredDocumentation","src":"5920:280:59","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":10578,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:59","nodeType":"FunctionDefinition","parameters":{"id":10554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10553,"mutability":"mutable","name":"value","nameLocation":"6232:5:59","nodeType":"VariableDeclaration","scope":10578,"src":"6224:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10552,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:59"},"returnParameters":{"id":10557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10578,"src":"6262:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":10555,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:59","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:59"},"scope":12026,"src":"6205:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10605,"nodeType":"Block","src":"6780:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10586,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10581,"src":"6794:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":10588,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":10587,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":10591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:59","memberName":"max","nodeType":"MemberAccess","src":"6802:17:59","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10599,"nodeType":"IfStatement","src":"6790:105:59","trueBody":{"id":10598,"nodeType":"Block","src":"6821:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":10594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:59","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":10595,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10581,"src":"6878:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10593,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"6842:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10597,"nodeType":"RevertStatement","src":"6835:49:59"}]}},{"expression":{"arguments":[{"id":10602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10581,"src":"6919:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":10600,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:59","typeDescriptions":{}}},"id":10603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":10585,"id":10604,"nodeType":"Return","src":"6904:21:59"}]},"documentation":{"id":10579,"nodeType":"StructuredDocumentation","src":"6429:280:59","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":10606,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:59","nodeType":"FunctionDefinition","parameters":{"id":10582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10581,"mutability":"mutable","name":"value","nameLocation":"6741:5:59","nodeType":"VariableDeclaration","scope":10606,"src":"6733:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10580,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:59"},"returnParameters":{"id":10585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10606,"src":"6771:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":10583,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:59","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:59"},"scope":12026,"src":"6714:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10633,"nodeType":"Block","src":"7289:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"7303:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":10616,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":10615,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":10619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:59","memberName":"max","nodeType":"MemberAccess","src":"7311:17:59","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10627,"nodeType":"IfStatement","src":"7299:105:59","trueBody":{"id":10626,"nodeType":"Block","src":"7330:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":10622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:59","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":10623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"7387:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10621,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"7351:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10625,"nodeType":"RevertStatement","src":"7344:49:59"}]}},{"expression":{"arguments":[{"id":10630,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"7428:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":10628,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:59","typeDescriptions":{}}},"id":10631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":10613,"id":10632,"nodeType":"Return","src":"7413:21:59"}]},"documentation":{"id":10607,"nodeType":"StructuredDocumentation","src":"6938:280:59","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":10634,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:59","nodeType":"FunctionDefinition","parameters":{"id":10610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10609,"mutability":"mutable","name":"value","nameLocation":"7250:5:59","nodeType":"VariableDeclaration","scope":10634,"src":"7242:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10608,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:59"},"returnParameters":{"id":10613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10634,"src":"7280:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":10611,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:59","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:59"},"scope":12026,"src":"7223:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10661,"nodeType":"Block","src":"7798:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10642,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10637,"src":"7812:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":10644,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":10643,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":10647,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:59","memberName":"max","nodeType":"MemberAccess","src":"7820:17:59","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10655,"nodeType":"IfStatement","src":"7808:105:59","trueBody":{"id":10654,"nodeType":"Block","src":"7839:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":10650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:59","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":10651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10637,"src":"7896:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10649,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"7860:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10653,"nodeType":"RevertStatement","src":"7853:49:59"}]}},{"expression":{"arguments":[{"id":10658,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10637,"src":"7937:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":10656,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:59","typeDescriptions":{}}},"id":10659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":10641,"id":10660,"nodeType":"Return","src":"7922:21:59"}]},"documentation":{"id":10635,"nodeType":"StructuredDocumentation","src":"7447:280:59","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":10662,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:59","nodeType":"FunctionDefinition","parameters":{"id":10638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10637,"mutability":"mutable","name":"value","nameLocation":"7759:5:59","nodeType":"VariableDeclaration","scope":10662,"src":"7751:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10636,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:59"},"returnParameters":{"id":10641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10640,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10662,"src":"7789:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":10639,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:59","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:59"},"scope":12026,"src":"7732:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10689,"nodeType":"Block","src":"8307:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10665,"src":"8321:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":10672,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":10671,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":10675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:59","memberName":"max","nodeType":"MemberAccess","src":"8329:17:59","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10683,"nodeType":"IfStatement","src":"8317:105:59","trueBody":{"id":10682,"nodeType":"Block","src":"8348:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":10678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:59","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":10679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10665,"src":"8405:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10677,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"8369:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10681,"nodeType":"RevertStatement","src":"8362:49:59"}]}},{"expression":{"arguments":[{"id":10686,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10665,"src":"8446:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":10684,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:59","typeDescriptions":{}}},"id":10687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":10669,"id":10688,"nodeType":"Return","src":"8431:21:59"}]},"documentation":{"id":10663,"nodeType":"StructuredDocumentation","src":"7956:280:59","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":10690,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:59","nodeType":"FunctionDefinition","parameters":{"id":10666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10665,"mutability":"mutable","name":"value","nameLocation":"8268:5:59","nodeType":"VariableDeclaration","scope":10690,"src":"8260:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10664,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:59"},"returnParameters":{"id":10669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10690,"src":"8298:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":10667,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:59","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:59"},"scope":12026,"src":"8241:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10717,"nodeType":"Block","src":"8816:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10693,"src":"8830:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":10700,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":10699,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":10703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:59","memberName":"max","nodeType":"MemberAccess","src":"8838:17:59","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10711,"nodeType":"IfStatement","src":"8826:105:59","trueBody":{"id":10710,"nodeType":"Block","src":"8857:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":10706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:59","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":10707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10693,"src":"8914:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10705,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"8878:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10709,"nodeType":"RevertStatement","src":"8871:49:59"}]}},{"expression":{"arguments":[{"id":10714,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10693,"src":"8955:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":10712,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:59","typeDescriptions":{}}},"id":10715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":10697,"id":10716,"nodeType":"Return","src":"8940:21:59"}]},"documentation":{"id":10691,"nodeType":"StructuredDocumentation","src":"8465:280:59","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":10718,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:59","nodeType":"FunctionDefinition","parameters":{"id":10694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10693,"mutability":"mutable","name":"value","nameLocation":"8777:5:59","nodeType":"VariableDeclaration","scope":10718,"src":"8769:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10692,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:59"},"returnParameters":{"id":10697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10718,"src":"8807:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":10695,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:59","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:59"},"scope":12026,"src":"8750:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10745,"nodeType":"Block","src":"9325:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10726,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10721,"src":"9339:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":10728,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":10727,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":10731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:59","memberName":"max","nodeType":"MemberAccess","src":"9347:17:59","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10739,"nodeType":"IfStatement","src":"9335:105:59","trueBody":{"id":10738,"nodeType":"Block","src":"9366:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":10734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:59","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":10735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10721,"src":"9423:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10733,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"9387:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10737,"nodeType":"RevertStatement","src":"9380:49:59"}]}},{"expression":{"arguments":[{"id":10742,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10721,"src":"9464:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":10740,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:59","typeDescriptions":{}}},"id":10743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":10725,"id":10744,"nodeType":"Return","src":"9449:21:59"}]},"documentation":{"id":10719,"nodeType":"StructuredDocumentation","src":"8974:280:59","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":10746,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:59","nodeType":"FunctionDefinition","parameters":{"id":10722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10721,"mutability":"mutable","name":"value","nameLocation":"9286:5:59","nodeType":"VariableDeclaration","scope":10746,"src":"9278:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10720,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:59"},"returnParameters":{"id":10725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10746,"src":"9316:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":10723,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:59","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:59"},"scope":12026,"src":"9259:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10773,"nodeType":"Block","src":"9834:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10754,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10749,"src":"9848:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":10756,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":10755,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":10759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:59","memberName":"max","nodeType":"MemberAccess","src":"9856:17:59","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10767,"nodeType":"IfStatement","src":"9844:105:59","trueBody":{"id":10766,"nodeType":"Block","src":"9875:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":10762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:59","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":10763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10749,"src":"9932:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10761,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"9896:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10765,"nodeType":"RevertStatement","src":"9889:49:59"}]}},{"expression":{"arguments":[{"id":10770,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10749,"src":"9973:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":10768,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:59","typeDescriptions":{}}},"id":10771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":10753,"id":10772,"nodeType":"Return","src":"9958:21:59"}]},"documentation":{"id":10747,"nodeType":"StructuredDocumentation","src":"9483:280:59","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":10774,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:59","nodeType":"FunctionDefinition","parameters":{"id":10750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10749,"mutability":"mutable","name":"value","nameLocation":"9795:5:59","nodeType":"VariableDeclaration","scope":10774,"src":"9787:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10748,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:59"},"returnParameters":{"id":10753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10774,"src":"9825:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":10751,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:59","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:59"},"scope":12026,"src":"9768:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10801,"nodeType":"Block","src":"10343:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10777,"src":"10357:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":10784,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":10783,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":10787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:59","memberName":"max","nodeType":"MemberAccess","src":"10365:17:59","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10795,"nodeType":"IfStatement","src":"10353:105:59","trueBody":{"id":10794,"nodeType":"Block","src":"10384:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":10790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:59","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":10791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10777,"src":"10441:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10789,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"10405:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10793,"nodeType":"RevertStatement","src":"10398:49:59"}]}},{"expression":{"arguments":[{"id":10798,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10777,"src":"10482:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":10796,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:59","typeDescriptions":{}}},"id":10799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":10781,"id":10800,"nodeType":"Return","src":"10467:21:59"}]},"documentation":{"id":10775,"nodeType":"StructuredDocumentation","src":"9992:280:59","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":10802,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:59","nodeType":"FunctionDefinition","parameters":{"id":10778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10777,"mutability":"mutable","name":"value","nameLocation":"10304:5:59","nodeType":"VariableDeclaration","scope":10802,"src":"10296:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10776,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:59"},"returnParameters":{"id":10781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10802,"src":"10334:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":10779,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:59","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:59"},"scope":12026,"src":"10277:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10829,"nodeType":"Block","src":"10852:152:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10805,"src":"10866:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":10812,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":10811,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":10815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:59","memberName":"max","nodeType":"MemberAccess","src":"10874:17:59","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10823,"nodeType":"IfStatement","src":"10862:105:59","trueBody":{"id":10822,"nodeType":"Block","src":"10893:74:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":10818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:59","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":10819,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10805,"src":"10950:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10817,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"10914:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10821,"nodeType":"RevertStatement","src":"10907:49:59"}]}},{"expression":{"arguments":[{"id":10826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10805,"src":"10991:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":10824,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:59","typeDescriptions":{}}},"id":10827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":10809,"id":10828,"nodeType":"Return","src":"10976:21:59"}]},"documentation":{"id":10803,"nodeType":"StructuredDocumentation","src":"10501:280:59","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":10830,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:59","nodeType":"FunctionDefinition","parameters":{"id":10806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10805,"mutability":"mutable","name":"value","nameLocation":"10813:5:59","nodeType":"VariableDeclaration","scope":10830,"src":"10805:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10804,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:59"},"returnParameters":{"id":10809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10830,"src":"10843:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":10807,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:59","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:59"},"scope":12026,"src":"10786:218:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10857,"nodeType":"Block","src":"11355:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"11369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":10840,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":10839,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":10843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:59","memberName":"max","nodeType":"MemberAccess","src":"11377:16:59","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10851,"nodeType":"IfStatement","src":"11365:103:59","trueBody":{"id":10850,"nodeType":"Block","src":"11395:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":10846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:59","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":10847,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"11451:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10845,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"11416:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10849,"nodeType":"RevertStatement","src":"11409:48:59"}]}},{"expression":{"arguments":[{"id":10854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"11491:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":10852,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:59","typeDescriptions":{}}},"id":10855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":10837,"id":10856,"nodeType":"Return","src":"11477:20:59"}]},"documentation":{"id":10831,"nodeType":"StructuredDocumentation","src":"11010:276:59","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":10858,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:59","nodeType":"FunctionDefinition","parameters":{"id":10834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10833,"mutability":"mutable","name":"value","nameLocation":"11317:5:59","nodeType":"VariableDeclaration","scope":10858,"src":"11309:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10832,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:59"},"returnParameters":{"id":10837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10858,"src":"11347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":10835,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:59","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:59"},"scope":12026,"src":"11291:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10885,"nodeType":"Block","src":"11855:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10866,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10861,"src":"11869:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":10868,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":10867,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":10871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:59","memberName":"max","nodeType":"MemberAccess","src":"11877:16:59","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10879,"nodeType":"IfStatement","src":"11865:103:59","trueBody":{"id":10878,"nodeType":"Block","src":"11895:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":10874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:59","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":10875,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10861,"src":"11951:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10873,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"11916:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10877,"nodeType":"RevertStatement","src":"11909:48:59"}]}},{"expression":{"arguments":[{"id":10882,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10861,"src":"11991:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":10880,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:59","typeDescriptions":{}}},"id":10883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":10865,"id":10884,"nodeType":"Return","src":"11977:20:59"}]},"documentation":{"id":10859,"nodeType":"StructuredDocumentation","src":"11510:276:59","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":10886,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:59","nodeType":"FunctionDefinition","parameters":{"id":10862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10861,"mutability":"mutable","name":"value","nameLocation":"11817:5:59","nodeType":"VariableDeclaration","scope":10886,"src":"11809:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10860,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:59"},"returnParameters":{"id":10865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10886,"src":"11847:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":10863,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:59","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:59"},"scope":12026,"src":"11791:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10913,"nodeType":"Block","src":"12355:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10894,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10889,"src":"12369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":10896,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":10895,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":10899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:59","memberName":"max","nodeType":"MemberAccess","src":"12377:16:59","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10907,"nodeType":"IfStatement","src":"12365:103:59","trueBody":{"id":10906,"nodeType":"Block","src":"12395:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":10902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:59","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":10903,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10889,"src":"12451:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10901,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"12416:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10905,"nodeType":"RevertStatement","src":"12409:48:59"}]}},{"expression":{"arguments":[{"id":10910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10889,"src":"12491:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":10908,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:59","typeDescriptions":{}}},"id":10911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":10893,"id":10912,"nodeType":"Return","src":"12477:20:59"}]},"documentation":{"id":10887,"nodeType":"StructuredDocumentation","src":"12010:276:59","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":10914,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:59","nodeType":"FunctionDefinition","parameters":{"id":10890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10889,"mutability":"mutable","name":"value","nameLocation":"12317:5:59","nodeType":"VariableDeclaration","scope":10914,"src":"12309:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10888,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:59"},"returnParameters":{"id":10893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10892,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10914,"src":"12347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":10891,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:59","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:59"},"scope":12026,"src":"12291:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10941,"nodeType":"Block","src":"12855:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10922,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10917,"src":"12869:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":10924,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":10923,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10926,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":10927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:59","memberName":"max","nodeType":"MemberAccess","src":"12877:16:59","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10935,"nodeType":"IfStatement","src":"12865:103:59","trueBody":{"id":10934,"nodeType":"Block","src":"12895:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":10930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:59","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":10931,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10917,"src":"12951:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10929,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"12916:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10933,"nodeType":"RevertStatement","src":"12909:48:59"}]}},{"expression":{"arguments":[{"id":10938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10917,"src":"12991:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":10936,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:59","typeDescriptions":{}}},"id":10939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":10921,"id":10940,"nodeType":"Return","src":"12977:20:59"}]},"documentation":{"id":10915,"nodeType":"StructuredDocumentation","src":"12510:276:59","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":10942,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:59","nodeType":"FunctionDefinition","parameters":{"id":10918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10917,"mutability":"mutable","name":"value","nameLocation":"12817:5:59","nodeType":"VariableDeclaration","scope":10942,"src":"12809:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10916,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:59"},"returnParameters":{"id":10921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10942,"src":"12847:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":10919,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:59","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:59"},"scope":12026,"src":"12791:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10969,"nodeType":"Block","src":"13355:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10950,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10945,"src":"13369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":10952,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":10951,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":10955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:59","memberName":"max","nodeType":"MemberAccess","src":"13377:16:59","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10963,"nodeType":"IfStatement","src":"13365:103:59","trueBody":{"id":10962,"nodeType":"Block","src":"13395:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":10958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:59","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":10959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10945,"src":"13451:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10957,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"13416:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10961,"nodeType":"RevertStatement","src":"13409:48:59"}]}},{"expression":{"arguments":[{"id":10966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10945,"src":"13491:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":10964,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:59","typeDescriptions":{}}},"id":10967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":10949,"id":10968,"nodeType":"Return","src":"13477:20:59"}]},"documentation":{"id":10943,"nodeType":"StructuredDocumentation","src":"13010:276:59","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":10970,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:59","nodeType":"FunctionDefinition","parameters":{"id":10946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10945,"mutability":"mutable","name":"value","nameLocation":"13317:5:59","nodeType":"VariableDeclaration","scope":10970,"src":"13309:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10944,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:59"},"returnParameters":{"id":10949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10970,"src":"13347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":10947,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:59","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:59"},"scope":12026,"src":"13291:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10997,"nodeType":"Block","src":"13855:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10978,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10973,"src":"13869:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":10981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":10980,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":10979,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":10983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:59","memberName":"max","nodeType":"MemberAccess","src":"13877:16:59","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10991,"nodeType":"IfStatement","src":"13865:103:59","trueBody":{"id":10990,"nodeType":"Block","src":"13895:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":10986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:59","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":10987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10973,"src":"13951:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10985,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"13916:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":10988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10989,"nodeType":"RevertStatement","src":"13909:48:59"}]}},{"expression":{"arguments":[{"id":10994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10973,"src":"13991:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":10992,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:59","typeDescriptions":{}}},"id":10995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":10977,"id":10996,"nodeType":"Return","src":"13977:20:59"}]},"documentation":{"id":10971,"nodeType":"StructuredDocumentation","src":"13510:276:59","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":10998,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:59","nodeType":"FunctionDefinition","parameters":{"id":10974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10973,"mutability":"mutable","name":"value","nameLocation":"13817:5:59","nodeType":"VariableDeclaration","scope":10998,"src":"13809:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10972,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:59"},"returnParameters":{"id":10977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10976,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10998,"src":"13847:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":10975,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:59","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:59"},"scope":12026,"src":"13791:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11025,"nodeType":"Block","src":"14355:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11001,"src":"14369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":11008,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":11007,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":11011,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:59","memberName":"max","nodeType":"MemberAccess","src":"14377:16:59","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11019,"nodeType":"IfStatement","src":"14365:103:59","trueBody":{"id":11018,"nodeType":"Block","src":"14395:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":11014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:59","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":11015,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11001,"src":"14451:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11013,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"14416:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11017,"nodeType":"RevertStatement","src":"14409:48:59"}]}},{"expression":{"arguments":[{"id":11022,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11001,"src":"14491:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":11020,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:59","typeDescriptions":{}}},"id":11023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":11005,"id":11024,"nodeType":"Return","src":"14477:20:59"}]},"documentation":{"id":10999,"nodeType":"StructuredDocumentation","src":"14010:276:59","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":11026,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:59","nodeType":"FunctionDefinition","parameters":{"id":11002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11001,"mutability":"mutable","name":"value","nameLocation":"14317:5:59","nodeType":"VariableDeclaration","scope":11026,"src":"14309:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11000,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:59"},"returnParameters":{"id":11005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11026,"src":"14347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":11003,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:59","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:59"},"scope":12026,"src":"14291:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11053,"nodeType":"Block","src":"14855:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11029,"src":"14869:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":11036,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":11035,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":11039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:59","memberName":"max","nodeType":"MemberAccess","src":"14877:16:59","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11047,"nodeType":"IfStatement","src":"14865:103:59","trueBody":{"id":11046,"nodeType":"Block","src":"14895:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":11042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:59","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":11043,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11029,"src":"14951:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11041,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"14916:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11045,"nodeType":"RevertStatement","src":"14909:48:59"}]}},{"expression":{"arguments":[{"id":11050,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11029,"src":"14991:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":11048,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:59","typeDescriptions":{}}},"id":11051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":11033,"id":11052,"nodeType":"Return","src":"14977:20:59"}]},"documentation":{"id":11027,"nodeType":"StructuredDocumentation","src":"14510:276:59","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":11054,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:59","nodeType":"FunctionDefinition","parameters":{"id":11030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11029,"mutability":"mutable","name":"value","nameLocation":"14817:5:59","nodeType":"VariableDeclaration","scope":11054,"src":"14809:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11028,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:59"},"returnParameters":{"id":11033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11054,"src":"14847:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":11031,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:59","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:59"},"scope":12026,"src":"14791:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11081,"nodeType":"Block","src":"15355:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11057,"src":"15369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":11064,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":11063,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":11067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:59","memberName":"max","nodeType":"MemberAccess","src":"15377:16:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11075,"nodeType":"IfStatement","src":"15365:103:59","trueBody":{"id":11074,"nodeType":"Block","src":"15395:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":11070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:59","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":11071,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11057,"src":"15451:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11069,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"15416:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11073,"nodeType":"RevertStatement","src":"15409:48:59"}]}},{"expression":{"arguments":[{"id":11078,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11057,"src":"15491:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":11076,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:59","typeDescriptions":{}}},"id":11079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":11061,"id":11080,"nodeType":"Return","src":"15477:20:59"}]},"documentation":{"id":11055,"nodeType":"StructuredDocumentation","src":"15010:276:59","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":11082,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:59","nodeType":"FunctionDefinition","parameters":{"id":11058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11057,"mutability":"mutable","name":"value","nameLocation":"15317:5:59","nodeType":"VariableDeclaration","scope":11082,"src":"15309:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11056,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:59"},"returnParameters":{"id":11061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11060,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11082,"src":"15347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":11059,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:59"},"scope":12026,"src":"15291:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11109,"nodeType":"Block","src":"15855:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11090,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11085,"src":"15869:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":11092,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":11091,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":11095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:59","memberName":"max","nodeType":"MemberAccess","src":"15877:16:59","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11103,"nodeType":"IfStatement","src":"15865:103:59","trueBody":{"id":11102,"nodeType":"Block","src":"15895:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":11098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:59","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":11099,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11085,"src":"15951:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11097,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"15916:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11101,"nodeType":"RevertStatement","src":"15909:48:59"}]}},{"expression":{"arguments":[{"id":11106,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11085,"src":"15991:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":11104,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:59","typeDescriptions":{}}},"id":11107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":11089,"id":11108,"nodeType":"Return","src":"15977:20:59"}]},"documentation":{"id":11083,"nodeType":"StructuredDocumentation","src":"15510:276:59","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":11110,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:59","nodeType":"FunctionDefinition","parameters":{"id":11086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11085,"mutability":"mutable","name":"value","nameLocation":"15817:5:59","nodeType":"VariableDeclaration","scope":11110,"src":"15809:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11084,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:59"},"returnParameters":{"id":11089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11110,"src":"15847:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":11087,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:59","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:59"},"scope":12026,"src":"15791:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11137,"nodeType":"Block","src":"16355:149:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11118,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11113,"src":"16369:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":11120,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":11119,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":11123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:59","memberName":"max","nodeType":"MemberAccess","src":"16377:16:59","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11131,"nodeType":"IfStatement","src":"16365:103:59","trueBody":{"id":11130,"nodeType":"Block","src":"16395:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":11126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:59","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":11127,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11113,"src":"16451:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11125,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"16416:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11129,"nodeType":"RevertStatement","src":"16409:48:59"}]}},{"expression":{"arguments":[{"id":11134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11113,"src":"16491:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":11132,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:59","typeDescriptions":{}}},"id":11135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":11117,"id":11136,"nodeType":"Return","src":"16477:20:59"}]},"documentation":{"id":11111,"nodeType":"StructuredDocumentation","src":"16010:276:59","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":11138,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:59","nodeType":"FunctionDefinition","parameters":{"id":11114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11113,"mutability":"mutable","name":"value","nameLocation":"16317:5:59","nodeType":"VariableDeclaration","scope":11138,"src":"16309:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11112,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:59"},"returnParameters":{"id":11117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11138,"src":"16347:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":11115,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:59","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:59"},"scope":12026,"src":"16291:213:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11165,"nodeType":"Block","src":"16849:146:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11141,"src":"16863:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":11148,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":11147,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":11151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:59","memberName":"max","nodeType":"MemberAccess","src":"16871:15:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11159,"nodeType":"IfStatement","src":"16859:101:59","trueBody":{"id":11158,"nodeType":"Block","src":"16888:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":11154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:59","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":11155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11141,"src":"16943:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11153,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10281,"src":"16909:30:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11157,"nodeType":"RevertStatement","src":"16902:47:59"}]}},{"expression":{"arguments":[{"id":11162,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11141,"src":"16982:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":11160,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:59","typeDescriptions":{}}},"id":11163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":11145,"id":11164,"nodeType":"Return","src":"16969:19:59"}]},"documentation":{"id":11139,"nodeType":"StructuredDocumentation","src":"16510:272:59","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":11166,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:59","nodeType":"FunctionDefinition","parameters":{"id":11142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11141,"mutability":"mutable","name":"value","nameLocation":"16812:5:59","nodeType":"VariableDeclaration","scope":11166,"src":"16804:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11140,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:59"},"returnParameters":{"id":11145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11144,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11166,"src":"16842:5:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11143,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:59"},"scope":12026,"src":"16787:208:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11188,"nodeType":"Block","src":"17231:128:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11174,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11169,"src":"17245:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":11175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11182,"nodeType":"IfStatement","src":"17241:81:59","trueBody":{"id":11181,"nodeType":"Block","src":"17256:66:59","statements":[{"errorCall":{"arguments":[{"id":11178,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11169,"src":"17305:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11177,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10286,"src":"17277:27:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":11179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11180,"nodeType":"RevertStatement","src":"17270:41:59"}]}},{"expression":{"arguments":[{"id":11185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11169,"src":"17346:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11183,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:59","typeDescriptions":{}}},"id":11186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11173,"id":11187,"nodeType":"Return","src":"17331:21:59"}]},"documentation":{"id":11167,"nodeType":"StructuredDocumentation","src":"17001:160:59","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":11189,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:59","nodeType":"FunctionDefinition","parameters":{"id":11170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11169,"mutability":"mutable","name":"value","nameLocation":"17192:5:59","nodeType":"VariableDeclaration","scope":11189,"src":"17185:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11168,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:59"},"returnParameters":{"id":11173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11189,"src":"17222:7:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11171,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:59"},"scope":12026,"src":"17166:193:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11214,"nodeType":"Block","src":"17756:150:59","statements":[{"expression":{"id":11202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11197,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11195,"src":"17766:10:59","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11200,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11192,"src":"17786:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":11198,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:59","typeDescriptions":{}}},"id":11201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:59","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":11203,"nodeType":"ExpressionStatement","src":"17766:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11204,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11195,"src":"17806:10:59","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11205,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11192,"src":"17820:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11213,"nodeType":"IfStatement","src":"17802:98:59","trueBody":{"id":11212,"nodeType":"Block","src":"17827:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":11208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:59","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":11209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11192,"src":"17883:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11207,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"17848:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11211,"nodeType":"RevertStatement","src":"17841:48:59"}]}}]},"documentation":{"id":11190,"nodeType":"StructuredDocumentation","src":"17365:312:59","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":11215,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:59","nodeType":"FunctionDefinition","parameters":{"id":11193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11192,"mutability":"mutable","name":"value","nameLocation":"17707:5:59","nodeType":"VariableDeclaration","scope":11215,"src":"17700:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11191,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:59"},"returnParameters":{"id":11196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11195,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:59","nodeType":"VariableDeclaration","scope":11215,"src":"17737:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":11194,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:59","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:59"},"scope":12026,"src":"17682:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11240,"nodeType":"Block","src":"18303:150:59","statements":[{"expression":{"id":11228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11223,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11221,"src":"18313:10:59","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11218,"src":"18333:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":11224,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:59","typeDescriptions":{}}},"id":11227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:59","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":11229,"nodeType":"ExpressionStatement","src":"18313:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11230,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11221,"src":"18353:10:59","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11231,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11218,"src":"18367:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11239,"nodeType":"IfStatement","src":"18349:98:59","trueBody":{"id":11238,"nodeType":"Block","src":"18374:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":11234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:59","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":11235,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11218,"src":"18430:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11233,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"18395:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11237,"nodeType":"RevertStatement","src":"18388:48:59"}]}}]},"documentation":{"id":11216,"nodeType":"StructuredDocumentation","src":"17912:312:59","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":11241,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:59","nodeType":"FunctionDefinition","parameters":{"id":11219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11218,"mutability":"mutable","name":"value","nameLocation":"18254:5:59","nodeType":"VariableDeclaration","scope":11241,"src":"18247:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11217,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:59"},"returnParameters":{"id":11222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11221,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:59","nodeType":"VariableDeclaration","scope":11241,"src":"18284:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":11220,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:59","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:59"},"scope":12026,"src":"18229:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11266,"nodeType":"Block","src":"18850:150:59","statements":[{"expression":{"id":11254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11249,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11247,"src":"18860:10:59","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11252,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11244,"src":"18880:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":11250,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:59","typeDescriptions":{}}},"id":11253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:59","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":11255,"nodeType":"ExpressionStatement","src":"18860:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11256,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11247,"src":"18900:10:59","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11257,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11244,"src":"18914:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11265,"nodeType":"IfStatement","src":"18896:98:59","trueBody":{"id":11264,"nodeType":"Block","src":"18921:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":11260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:59","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":11261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11244,"src":"18977:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11259,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"18942:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11263,"nodeType":"RevertStatement","src":"18935:48:59"}]}}]},"documentation":{"id":11242,"nodeType":"StructuredDocumentation","src":"18459:312:59","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":11267,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:59","nodeType":"FunctionDefinition","parameters":{"id":11245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11244,"mutability":"mutable","name":"value","nameLocation":"18801:5:59","nodeType":"VariableDeclaration","scope":11267,"src":"18794:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11243,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:59"},"returnParameters":{"id":11248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11247,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:59","nodeType":"VariableDeclaration","scope":11267,"src":"18831:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":11246,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:59","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:59"},"scope":12026,"src":"18776:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11292,"nodeType":"Block","src":"19397:150:59","statements":[{"expression":{"id":11280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11275,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11273,"src":"19407:10:59","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11278,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11270,"src":"19427:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":11276,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:59","typeDescriptions":{}}},"id":11279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:59","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":11281,"nodeType":"ExpressionStatement","src":"19407:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11282,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11273,"src":"19447:10:59","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11283,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11270,"src":"19461:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11291,"nodeType":"IfStatement","src":"19443:98:59","trueBody":{"id":11290,"nodeType":"Block","src":"19468:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":11286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:59","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":11287,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11270,"src":"19524:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11285,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"19489:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11289,"nodeType":"RevertStatement","src":"19482:48:59"}]}}]},"documentation":{"id":11268,"nodeType":"StructuredDocumentation","src":"19006:312:59","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":11293,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:59","nodeType":"FunctionDefinition","parameters":{"id":11271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11270,"mutability":"mutable","name":"value","nameLocation":"19348:5:59","nodeType":"VariableDeclaration","scope":11293,"src":"19341:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11269,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:59"},"returnParameters":{"id":11274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11273,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:59","nodeType":"VariableDeclaration","scope":11293,"src":"19378:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":11272,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:59","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:59"},"scope":12026,"src":"19323:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11318,"nodeType":"Block","src":"19944:150:59","statements":[{"expression":{"id":11306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11301,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11299,"src":"19954:10:59","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11304,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11296,"src":"19974:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11303,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":11302,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:59","typeDescriptions":{}}},"id":11305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:59","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":11307,"nodeType":"ExpressionStatement","src":"19954:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11308,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11299,"src":"19994:10:59","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11309,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11296,"src":"20008:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11317,"nodeType":"IfStatement","src":"19990:98:59","trueBody":{"id":11316,"nodeType":"Block","src":"20015:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":11312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:59","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":11313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11296,"src":"20071:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11311,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"20036:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11315,"nodeType":"RevertStatement","src":"20029:48:59"}]}}]},"documentation":{"id":11294,"nodeType":"StructuredDocumentation","src":"19553:312:59","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":11319,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:59","nodeType":"FunctionDefinition","parameters":{"id":11297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11296,"mutability":"mutable","name":"value","nameLocation":"19895:5:59","nodeType":"VariableDeclaration","scope":11319,"src":"19888:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11295,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:59"},"returnParameters":{"id":11300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11299,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:59","nodeType":"VariableDeclaration","scope":11319,"src":"19925:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":11298,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:59","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:59"},"scope":12026,"src":"19870:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11344,"nodeType":"Block","src":"20491:150:59","statements":[{"expression":{"id":11332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11327,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"20501:10:59","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11330,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11322,"src":"20521:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11329,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":11328,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:59","typeDescriptions":{}}},"id":11331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:59","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":11333,"nodeType":"ExpressionStatement","src":"20501:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11334,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"20541:10:59","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11335,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11322,"src":"20555:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11343,"nodeType":"IfStatement","src":"20537:98:59","trueBody":{"id":11342,"nodeType":"Block","src":"20562:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":11338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:59","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":11339,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11322,"src":"20618:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11337,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"20583:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11341,"nodeType":"RevertStatement","src":"20576:48:59"}]}}]},"documentation":{"id":11320,"nodeType":"StructuredDocumentation","src":"20100:312:59","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":11345,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:59","nodeType":"FunctionDefinition","parameters":{"id":11323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11322,"mutability":"mutable","name":"value","nameLocation":"20442:5:59","nodeType":"VariableDeclaration","scope":11345,"src":"20435:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11321,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:59"},"returnParameters":{"id":11326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11325,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:59","nodeType":"VariableDeclaration","scope":11345,"src":"20472:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":11324,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:59","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:59"},"scope":12026,"src":"20417:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11370,"nodeType":"Block","src":"21038:150:59","statements":[{"expression":{"id":11358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11353,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11351,"src":"21048:10:59","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11356,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11348,"src":"21068:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11355,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":11354,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:59","typeDescriptions":{}}},"id":11357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:59","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":11359,"nodeType":"ExpressionStatement","src":"21048:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11360,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11351,"src":"21088:10:59","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11361,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11348,"src":"21102:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11369,"nodeType":"IfStatement","src":"21084:98:59","trueBody":{"id":11368,"nodeType":"Block","src":"21109:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":11364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:59","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":11365,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11348,"src":"21165:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11363,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"21130:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11367,"nodeType":"RevertStatement","src":"21123:48:59"}]}}]},"documentation":{"id":11346,"nodeType":"StructuredDocumentation","src":"20647:312:59","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":11371,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:59","nodeType":"FunctionDefinition","parameters":{"id":11349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11348,"mutability":"mutable","name":"value","nameLocation":"20989:5:59","nodeType":"VariableDeclaration","scope":11371,"src":"20982:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11347,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:59"},"returnParameters":{"id":11352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11351,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:59","nodeType":"VariableDeclaration","scope":11371,"src":"21019:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":11350,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:59","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:59"},"scope":12026,"src":"20964:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11396,"nodeType":"Block","src":"21585:150:59","statements":[{"expression":{"id":11384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11379,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11377,"src":"21595:10:59","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11382,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11374,"src":"21615:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":11380,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:59","typeDescriptions":{}}},"id":11383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:59","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":11385,"nodeType":"ExpressionStatement","src":"21595:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11386,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11377,"src":"21635:10:59","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11387,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11374,"src":"21649:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11395,"nodeType":"IfStatement","src":"21631:98:59","trueBody":{"id":11394,"nodeType":"Block","src":"21656:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":11390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:59","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":11391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11374,"src":"21712:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11389,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"21677:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11393,"nodeType":"RevertStatement","src":"21670:48:59"}]}}]},"documentation":{"id":11372,"nodeType":"StructuredDocumentation","src":"21194:312:59","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":11397,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:59","nodeType":"FunctionDefinition","parameters":{"id":11375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11374,"mutability":"mutable","name":"value","nameLocation":"21536:5:59","nodeType":"VariableDeclaration","scope":11397,"src":"21529:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11373,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:59"},"returnParameters":{"id":11378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11377,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:59","nodeType":"VariableDeclaration","scope":11397,"src":"21566:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":11376,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:59","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:59"},"scope":12026,"src":"21511:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11422,"nodeType":"Block","src":"22132:150:59","statements":[{"expression":{"id":11410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11405,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11403,"src":"22142:10:59","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11408,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11400,"src":"22162:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":11406,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:59","typeDescriptions":{}}},"id":11409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:59","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":11411,"nodeType":"ExpressionStatement","src":"22142:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11412,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11403,"src":"22182:10:59","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11413,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11400,"src":"22196:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11421,"nodeType":"IfStatement","src":"22178:98:59","trueBody":{"id":11420,"nodeType":"Block","src":"22203:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":11416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:59","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":11417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11400,"src":"22259:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11415,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"22224:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11419,"nodeType":"RevertStatement","src":"22217:48:59"}]}}]},"documentation":{"id":11398,"nodeType":"StructuredDocumentation","src":"21741:312:59","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":11423,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:59","nodeType":"FunctionDefinition","parameters":{"id":11401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11400,"mutability":"mutable","name":"value","nameLocation":"22083:5:59","nodeType":"VariableDeclaration","scope":11423,"src":"22076:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11399,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:59"},"returnParameters":{"id":11404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11403,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:59","nodeType":"VariableDeclaration","scope":11423,"src":"22113:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":11402,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:59","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:59"},"scope":12026,"src":"22058:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11448,"nodeType":"Block","src":"22679:150:59","statements":[{"expression":{"id":11436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11431,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11429,"src":"22689:10:59","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11434,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11426,"src":"22709:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":11432,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:59","typeDescriptions":{}}},"id":11435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:59","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":11437,"nodeType":"ExpressionStatement","src":"22689:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11438,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11429,"src":"22729:10:59","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11439,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11426,"src":"22743:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11447,"nodeType":"IfStatement","src":"22725:98:59","trueBody":{"id":11446,"nodeType":"Block","src":"22750:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":11442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:59","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":11443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11426,"src":"22806:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11441,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"22771:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11445,"nodeType":"RevertStatement","src":"22764:48:59"}]}}]},"documentation":{"id":11424,"nodeType":"StructuredDocumentation","src":"22288:312:59","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":11449,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:59","nodeType":"FunctionDefinition","parameters":{"id":11427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11426,"mutability":"mutable","name":"value","nameLocation":"22630:5:59","nodeType":"VariableDeclaration","scope":11449,"src":"22623:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11425,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:59"},"returnParameters":{"id":11430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11429,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:59","nodeType":"VariableDeclaration","scope":11449,"src":"22660:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":11428,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:59","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:59"},"scope":12026,"src":"22605:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11474,"nodeType":"Block","src":"23226:150:59","statements":[{"expression":{"id":11462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11457,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11455,"src":"23236:10:59","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11460,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"23256:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":11458,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:59","typeDescriptions":{}}},"id":11461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:59","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":11463,"nodeType":"ExpressionStatement","src":"23236:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11464,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11455,"src":"23276:10:59","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11465,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"23290:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11473,"nodeType":"IfStatement","src":"23272:98:59","trueBody":{"id":11472,"nodeType":"Block","src":"23297:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":11468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:59","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":11469,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"23353:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11467,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"23318:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11471,"nodeType":"RevertStatement","src":"23311:48:59"}]}}]},"documentation":{"id":11450,"nodeType":"StructuredDocumentation","src":"22835:312:59","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":11475,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:59","nodeType":"FunctionDefinition","parameters":{"id":11453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11452,"mutability":"mutable","name":"value","nameLocation":"23177:5:59","nodeType":"VariableDeclaration","scope":11475,"src":"23170:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11451,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:59"},"returnParameters":{"id":11456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11455,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:59","nodeType":"VariableDeclaration","scope":11475,"src":"23207:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":11454,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:59","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:59"},"scope":12026,"src":"23152:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11500,"nodeType":"Block","src":"23773:150:59","statements":[{"expression":{"id":11488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11483,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11481,"src":"23783:10:59","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11486,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11478,"src":"23803:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":11484,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:59","typeDescriptions":{}}},"id":11487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:59","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":11489,"nodeType":"ExpressionStatement","src":"23783:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11490,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11481,"src":"23823:10:59","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11491,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11478,"src":"23837:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11499,"nodeType":"IfStatement","src":"23819:98:59","trueBody":{"id":11498,"nodeType":"Block","src":"23844:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":11494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:59","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":11495,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11478,"src":"23900:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11493,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"23865:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11497,"nodeType":"RevertStatement","src":"23858:48:59"}]}}]},"documentation":{"id":11476,"nodeType":"StructuredDocumentation","src":"23382:312:59","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":11501,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:59","nodeType":"FunctionDefinition","parameters":{"id":11479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11478,"mutability":"mutable","name":"value","nameLocation":"23724:5:59","nodeType":"VariableDeclaration","scope":11501,"src":"23717:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11477,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:59"},"returnParameters":{"id":11482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11481,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:59","nodeType":"VariableDeclaration","scope":11501,"src":"23754:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":11480,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:59","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:59"},"scope":12026,"src":"23699:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11526,"nodeType":"Block","src":"24320:150:59","statements":[{"expression":{"id":11514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11509,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11507,"src":"24330:10:59","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11512,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"24350:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":11510,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:59","typeDescriptions":{}}},"id":11513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:59","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":11515,"nodeType":"ExpressionStatement","src":"24330:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11516,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11507,"src":"24370:10:59","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11517,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"24384:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11525,"nodeType":"IfStatement","src":"24366:98:59","trueBody":{"id":11524,"nodeType":"Block","src":"24391:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":11520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:59","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":11521,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"24447:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11519,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"24412:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11523,"nodeType":"RevertStatement","src":"24405:48:59"}]}}]},"documentation":{"id":11502,"nodeType":"StructuredDocumentation","src":"23929:312:59","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":11527,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:59","nodeType":"FunctionDefinition","parameters":{"id":11505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11504,"mutability":"mutable","name":"value","nameLocation":"24271:5:59","nodeType":"VariableDeclaration","scope":11527,"src":"24264:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11503,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:59"},"returnParameters":{"id":11508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11507,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:59","nodeType":"VariableDeclaration","scope":11527,"src":"24301:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":11506,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:59","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:59"},"scope":12026,"src":"24246:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11552,"nodeType":"Block","src":"24867:150:59","statements":[{"expression":{"id":11540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11535,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"24877:10:59","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11538,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11530,"src":"24897:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":11536,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:59","typeDescriptions":{}}},"id":11539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:59","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":11541,"nodeType":"ExpressionStatement","src":"24877:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11542,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"24917:10:59","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11543,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11530,"src":"24931:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11551,"nodeType":"IfStatement","src":"24913:98:59","trueBody":{"id":11550,"nodeType":"Block","src":"24938:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":11546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:59","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":11547,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11530,"src":"24994:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11545,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"24959:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11549,"nodeType":"RevertStatement","src":"24952:48:59"}]}}]},"documentation":{"id":11528,"nodeType":"StructuredDocumentation","src":"24476:312:59","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":11553,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:59","nodeType":"FunctionDefinition","parameters":{"id":11531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11530,"mutability":"mutable","name":"value","nameLocation":"24818:5:59","nodeType":"VariableDeclaration","scope":11553,"src":"24811:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11529,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:59"},"returnParameters":{"id":11534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11533,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:59","nodeType":"VariableDeclaration","scope":11553,"src":"24848:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":11532,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:59","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:59"},"scope":12026,"src":"24793:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11578,"nodeType":"Block","src":"25414:150:59","statements":[{"expression":{"id":11566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11561,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11559,"src":"25424:10:59","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11564,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11556,"src":"25444:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":11562,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:59","typeDescriptions":{}}},"id":11565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:59","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":11567,"nodeType":"ExpressionStatement","src":"25424:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11568,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11559,"src":"25464:10:59","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11569,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11556,"src":"25478:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11577,"nodeType":"IfStatement","src":"25460:98:59","trueBody":{"id":11576,"nodeType":"Block","src":"25485:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":11572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:59","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":11573,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11556,"src":"25541:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11571,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"25506:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11575,"nodeType":"RevertStatement","src":"25499:48:59"}]}}]},"documentation":{"id":11554,"nodeType":"StructuredDocumentation","src":"25023:312:59","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":11579,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:59","nodeType":"FunctionDefinition","parameters":{"id":11557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11556,"mutability":"mutable","name":"value","nameLocation":"25365:5:59","nodeType":"VariableDeclaration","scope":11579,"src":"25358:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11555,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:59"},"returnParameters":{"id":11560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11559,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:59","nodeType":"VariableDeclaration","scope":11579,"src":"25395:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":11558,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:59","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:59"},"scope":12026,"src":"25340:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11604,"nodeType":"Block","src":"25961:150:59","statements":[{"expression":{"id":11592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11587,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11585,"src":"25971:10:59","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11590,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"25991:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":11588,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:59","typeDescriptions":{}}},"id":11591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:59","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":11593,"nodeType":"ExpressionStatement","src":"25971:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11594,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11585,"src":"26011:10:59","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11595,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"26025:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11603,"nodeType":"IfStatement","src":"26007:98:59","trueBody":{"id":11602,"nodeType":"Block","src":"26032:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":11598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:59","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":11599,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"26088:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11597,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"26053:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11601,"nodeType":"RevertStatement","src":"26046:48:59"}]}}]},"documentation":{"id":11580,"nodeType":"StructuredDocumentation","src":"25570:312:59","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":11605,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:59","nodeType":"FunctionDefinition","parameters":{"id":11583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11582,"mutability":"mutable","name":"value","nameLocation":"25912:5:59","nodeType":"VariableDeclaration","scope":11605,"src":"25905:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11581,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:59"},"returnParameters":{"id":11586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11585,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:59","nodeType":"VariableDeclaration","scope":11605,"src":"25942:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":11584,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:59","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:59"},"scope":12026,"src":"25887:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11630,"nodeType":"Block","src":"26508:150:59","statements":[{"expression":{"id":11618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11613,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11611,"src":"26518:10:59","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11616,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11608,"src":"26538:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":11614,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:59","typeDescriptions":{}}},"id":11617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:59","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":11619,"nodeType":"ExpressionStatement","src":"26518:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11620,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11611,"src":"26558:10:59","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11621,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11608,"src":"26572:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11629,"nodeType":"IfStatement","src":"26554:98:59","trueBody":{"id":11628,"nodeType":"Block","src":"26579:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":11624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:59","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":11625,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11608,"src":"26635:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11623,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"26600:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11627,"nodeType":"RevertStatement","src":"26593:48:59"}]}}]},"documentation":{"id":11606,"nodeType":"StructuredDocumentation","src":"26117:312:59","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":11631,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:59","nodeType":"FunctionDefinition","parameters":{"id":11609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11608,"mutability":"mutable","name":"value","nameLocation":"26459:5:59","nodeType":"VariableDeclaration","scope":11631,"src":"26452:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11607,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:59"},"returnParameters":{"id":11612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11611,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:59","nodeType":"VariableDeclaration","scope":11631,"src":"26489:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":11610,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:59","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:59"},"scope":12026,"src":"26434:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11656,"nodeType":"Block","src":"27055:150:59","statements":[{"expression":{"id":11644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11639,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11637,"src":"27065:10:59","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11642,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11634,"src":"27085:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":11640,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:59","typeDescriptions":{}}},"id":11643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:59","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":11645,"nodeType":"ExpressionStatement","src":"27065:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11646,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11637,"src":"27105:10:59","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11647,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11634,"src":"27119:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11655,"nodeType":"IfStatement","src":"27101:98:59","trueBody":{"id":11654,"nodeType":"Block","src":"27126:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":11650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:59","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":11651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11634,"src":"27182:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11649,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"27147:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11653,"nodeType":"RevertStatement","src":"27140:48:59"}]}}]},"documentation":{"id":11632,"nodeType":"StructuredDocumentation","src":"26664:312:59","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":11657,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:59","nodeType":"FunctionDefinition","parameters":{"id":11635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11634,"mutability":"mutable","name":"value","nameLocation":"27006:5:59","nodeType":"VariableDeclaration","scope":11657,"src":"26999:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11633,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:59"},"returnParameters":{"id":11638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11637,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:59","nodeType":"VariableDeclaration","scope":11657,"src":"27036:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":11636,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:59","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:59"},"scope":12026,"src":"26981:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11682,"nodeType":"Block","src":"27602:150:59","statements":[{"expression":{"id":11670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11665,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11663,"src":"27612:10:59","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11668,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"27632:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11667,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":11666,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:59","typeDescriptions":{}}},"id":11669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:59","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":11671,"nodeType":"ExpressionStatement","src":"27612:26:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11672,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11663,"src":"27652:10:59","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11673,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"27666:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11681,"nodeType":"IfStatement","src":"27648:98:59","trueBody":{"id":11680,"nodeType":"Block","src":"27673:73:59","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":11676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:59","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":11677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"27729:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11675,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"27694:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11679,"nodeType":"RevertStatement","src":"27687:48:59"}]}}]},"documentation":{"id":11658,"nodeType":"StructuredDocumentation","src":"27211:312:59","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":11683,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:59","nodeType":"FunctionDefinition","parameters":{"id":11661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11660,"mutability":"mutable","name":"value","nameLocation":"27553:5:59","nodeType":"VariableDeclaration","scope":11683,"src":"27546:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11659,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:59"},"returnParameters":{"id":11664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11663,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:59","nodeType":"VariableDeclaration","scope":11683,"src":"27583:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":11662,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:59","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:59"},"scope":12026,"src":"27528:224:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11708,"nodeType":"Block","src":"28142:148:59","statements":[{"expression":{"id":11696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11691,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11689,"src":"28152:10:59","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11694,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11686,"src":"28171:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":11692,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:59","typeDescriptions":{}}},"id":11695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:59","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":11697,"nodeType":"ExpressionStatement","src":"28152:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11698,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11689,"src":"28191:10:59","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11699,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11686,"src":"28205:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11707,"nodeType":"IfStatement","src":"28187:97:59","trueBody":{"id":11706,"nodeType":"Block","src":"28212:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":11702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:59","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":11703,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11686,"src":"28267:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11701,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"28233:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11705,"nodeType":"RevertStatement","src":"28226:47:59"}]}}]},"documentation":{"id":11684,"nodeType":"StructuredDocumentation","src":"27758:307:59","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":11709,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:59","nodeType":"FunctionDefinition","parameters":{"id":11687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11686,"mutability":"mutable","name":"value","nameLocation":"28094:5:59","nodeType":"VariableDeclaration","scope":11709,"src":"28087:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11685,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:59"},"returnParameters":{"id":11690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11689,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:59","nodeType":"VariableDeclaration","scope":11709,"src":"28124:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":11688,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:59","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:59"},"scope":12026,"src":"28070:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11734,"nodeType":"Block","src":"28680:148:59","statements":[{"expression":{"id":11722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11717,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"28690:10:59","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11720,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11712,"src":"28709:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":11718,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:59","typeDescriptions":{}}},"id":11721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:59","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":11723,"nodeType":"ExpressionStatement","src":"28690:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11724,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"28729:10:59","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11725,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11712,"src":"28743:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11733,"nodeType":"IfStatement","src":"28725:97:59","trueBody":{"id":11732,"nodeType":"Block","src":"28750:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":11728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:59","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":11729,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11712,"src":"28805:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11727,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"28771:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11731,"nodeType":"RevertStatement","src":"28764:47:59"}]}}]},"documentation":{"id":11710,"nodeType":"StructuredDocumentation","src":"28296:307:59","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":11735,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:59","nodeType":"FunctionDefinition","parameters":{"id":11713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11712,"mutability":"mutable","name":"value","nameLocation":"28632:5:59","nodeType":"VariableDeclaration","scope":11735,"src":"28625:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11711,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:59"},"returnParameters":{"id":11716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11715,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:59","nodeType":"VariableDeclaration","scope":11735,"src":"28662:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":11714,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:59","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:59"},"scope":12026,"src":"28608:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11760,"nodeType":"Block","src":"29218:148:59","statements":[{"expression":{"id":11748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11743,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11741,"src":"29228:10:59","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11746,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11738,"src":"29247:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":11744,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:59","typeDescriptions":{}}},"id":11747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:59","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":11749,"nodeType":"ExpressionStatement","src":"29228:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11750,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11741,"src":"29267:10:59","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11751,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11738,"src":"29281:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11759,"nodeType":"IfStatement","src":"29263:97:59","trueBody":{"id":11758,"nodeType":"Block","src":"29288:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":11754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:59","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":11755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11738,"src":"29343:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11753,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"29309:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11757,"nodeType":"RevertStatement","src":"29302:47:59"}]}}]},"documentation":{"id":11736,"nodeType":"StructuredDocumentation","src":"28834:307:59","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":11761,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:59","nodeType":"FunctionDefinition","parameters":{"id":11739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11738,"mutability":"mutable","name":"value","nameLocation":"29170:5:59","nodeType":"VariableDeclaration","scope":11761,"src":"29163:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11737,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:59"},"returnParameters":{"id":11742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11741,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:59","nodeType":"VariableDeclaration","scope":11761,"src":"29200:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":11740,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:59","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:59"},"scope":12026,"src":"29146:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11786,"nodeType":"Block","src":"29756:148:59","statements":[{"expression":{"id":11774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11769,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11767,"src":"29766:10:59","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11772,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"29785:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":11770,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:59","typeDescriptions":{}}},"id":11773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:59","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":11775,"nodeType":"ExpressionStatement","src":"29766:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11776,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11767,"src":"29805:10:59","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11777,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"29819:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11785,"nodeType":"IfStatement","src":"29801:97:59","trueBody":{"id":11784,"nodeType":"Block","src":"29826:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":11780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:59","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":11781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"29881:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11779,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"29847:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11783,"nodeType":"RevertStatement","src":"29840:47:59"}]}}]},"documentation":{"id":11762,"nodeType":"StructuredDocumentation","src":"29372:307:59","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":11787,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:59","nodeType":"FunctionDefinition","parameters":{"id":11765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11764,"mutability":"mutable","name":"value","nameLocation":"29708:5:59","nodeType":"VariableDeclaration","scope":11787,"src":"29701:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11763,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:59"},"returnParameters":{"id":11768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11767,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:59","nodeType":"VariableDeclaration","scope":11787,"src":"29738:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":11766,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:59","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:59"},"scope":12026,"src":"29684:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11812,"nodeType":"Block","src":"30294:148:59","statements":[{"expression":{"id":11800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11795,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11793,"src":"30304:10:59","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11798,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11790,"src":"30323:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":11796,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:59","typeDescriptions":{}}},"id":11799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:59","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":11801,"nodeType":"ExpressionStatement","src":"30304:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11802,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11793,"src":"30343:10:59","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11803,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11790,"src":"30357:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11811,"nodeType":"IfStatement","src":"30339:97:59","trueBody":{"id":11810,"nodeType":"Block","src":"30364:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":11806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:59","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":11807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11790,"src":"30419:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11805,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"30385:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11809,"nodeType":"RevertStatement","src":"30378:47:59"}]}}]},"documentation":{"id":11788,"nodeType":"StructuredDocumentation","src":"29910:307:59","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":11813,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:59","nodeType":"FunctionDefinition","parameters":{"id":11791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11790,"mutability":"mutable","name":"value","nameLocation":"30246:5:59","nodeType":"VariableDeclaration","scope":11813,"src":"30239:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11789,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:59"},"returnParameters":{"id":11794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11793,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:59","nodeType":"VariableDeclaration","scope":11813,"src":"30276:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":11792,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:59","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:59"},"scope":12026,"src":"30222:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11838,"nodeType":"Block","src":"30832:148:59","statements":[{"expression":{"id":11826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11821,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11819,"src":"30842:10:59","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11824,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11816,"src":"30861:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":11822,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:59","typeDescriptions":{}}},"id":11825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:59","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":11827,"nodeType":"ExpressionStatement","src":"30842:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11828,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11819,"src":"30881:10:59","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11829,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11816,"src":"30895:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11837,"nodeType":"IfStatement","src":"30877:97:59","trueBody":{"id":11836,"nodeType":"Block","src":"30902:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":11832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:59","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":11833,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11816,"src":"30957:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11831,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"30923:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11835,"nodeType":"RevertStatement","src":"30916:47:59"}]}}]},"documentation":{"id":11814,"nodeType":"StructuredDocumentation","src":"30448:307:59","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":11839,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:59","nodeType":"FunctionDefinition","parameters":{"id":11817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11816,"mutability":"mutable","name":"value","nameLocation":"30784:5:59","nodeType":"VariableDeclaration","scope":11839,"src":"30777:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11815,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:59"},"returnParameters":{"id":11820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11819,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:59","nodeType":"VariableDeclaration","scope":11839,"src":"30814:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":11818,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:59","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:59"},"scope":12026,"src":"30760:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11864,"nodeType":"Block","src":"31370:148:59","statements":[{"expression":{"id":11852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11847,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11845,"src":"31380:10:59","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11850,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11842,"src":"31399:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":11848,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:59","typeDescriptions":{}}},"id":11851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:59","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":11853,"nodeType":"ExpressionStatement","src":"31380:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11854,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11845,"src":"31419:10:59","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11855,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11842,"src":"31433:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11863,"nodeType":"IfStatement","src":"31415:97:59","trueBody":{"id":11862,"nodeType":"Block","src":"31440:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":11858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:59","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":11859,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11842,"src":"31495:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11857,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"31461:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11861,"nodeType":"RevertStatement","src":"31454:47:59"}]}}]},"documentation":{"id":11840,"nodeType":"StructuredDocumentation","src":"30986:307:59","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":11865,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:59","nodeType":"FunctionDefinition","parameters":{"id":11843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11842,"mutability":"mutable","name":"value","nameLocation":"31322:5:59","nodeType":"VariableDeclaration","scope":11865,"src":"31315:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11841,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:59"},"returnParameters":{"id":11846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11845,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:59","nodeType":"VariableDeclaration","scope":11865,"src":"31352:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":11844,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:59","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:59"},"scope":12026,"src":"31298:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11890,"nodeType":"Block","src":"31908:148:59","statements":[{"expression":{"id":11878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11873,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11871,"src":"31918:10:59","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11876,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11868,"src":"31937:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":11874,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:59","typeDescriptions":{}}},"id":11877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:59","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":11879,"nodeType":"ExpressionStatement","src":"31918:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11880,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11871,"src":"31957:10:59","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11881,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11868,"src":"31971:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11889,"nodeType":"IfStatement","src":"31953:97:59","trueBody":{"id":11888,"nodeType":"Block","src":"31978:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":11884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:59","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":11885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11868,"src":"32033:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11883,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"31999:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11887,"nodeType":"RevertStatement","src":"31992:47:59"}]}}]},"documentation":{"id":11866,"nodeType":"StructuredDocumentation","src":"31524:307:59","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":11891,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:59","nodeType":"FunctionDefinition","parameters":{"id":11869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11868,"mutability":"mutable","name":"value","nameLocation":"31860:5:59","nodeType":"VariableDeclaration","scope":11891,"src":"31853:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11867,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:59"},"returnParameters":{"id":11872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11871,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:59","nodeType":"VariableDeclaration","scope":11891,"src":"31890:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":11870,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:59","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:59"},"scope":12026,"src":"31836:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11916,"nodeType":"Block","src":"32446:148:59","statements":[{"expression":{"id":11904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11899,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11897,"src":"32456:10:59","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11902,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"32475:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":11900,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:59","typeDescriptions":{}}},"id":11903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:59","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":11905,"nodeType":"ExpressionStatement","src":"32456:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11906,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11897,"src":"32495:10:59","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11907,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"32509:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11915,"nodeType":"IfStatement","src":"32491:97:59","trueBody":{"id":11914,"nodeType":"Block","src":"32516:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":11910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:59","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":11911,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"32571:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11909,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"32537:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11913,"nodeType":"RevertStatement","src":"32530:47:59"}]}}]},"documentation":{"id":11892,"nodeType":"StructuredDocumentation","src":"32062:307:59","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":11917,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:59","nodeType":"FunctionDefinition","parameters":{"id":11895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11894,"mutability":"mutable","name":"value","nameLocation":"32398:5:59","nodeType":"VariableDeclaration","scope":11917,"src":"32391:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11893,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:59"},"returnParameters":{"id":11898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11897,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:59","nodeType":"VariableDeclaration","scope":11917,"src":"32428:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":11896,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:59","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:59"},"scope":12026,"src":"32374:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11942,"nodeType":"Block","src":"32984:148:59","statements":[{"expression":{"id":11930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11925,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11923,"src":"32994:10:59","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11928,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11920,"src":"33013:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":11926,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:59","typeDescriptions":{}}},"id":11929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:59","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":11931,"nodeType":"ExpressionStatement","src":"32994:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11932,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11923,"src":"33033:10:59","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11933,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11920,"src":"33047:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11941,"nodeType":"IfStatement","src":"33029:97:59","trueBody":{"id":11940,"nodeType":"Block","src":"33054:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":11936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:59","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":11937,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11920,"src":"33109:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11935,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"33075:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11939,"nodeType":"RevertStatement","src":"33068:47:59"}]}}]},"documentation":{"id":11918,"nodeType":"StructuredDocumentation","src":"32600:307:59","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":11943,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:59","nodeType":"FunctionDefinition","parameters":{"id":11921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11920,"mutability":"mutable","name":"value","nameLocation":"32936:5:59","nodeType":"VariableDeclaration","scope":11943,"src":"32929:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11919,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:59"},"returnParameters":{"id":11924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11923,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:59","nodeType":"VariableDeclaration","scope":11943,"src":"32966:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":11922,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:59","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:59"},"scope":12026,"src":"32912:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11968,"nodeType":"Block","src":"33522:148:59","statements":[{"expression":{"id":11956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11951,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11949,"src":"33532:10:59","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11954,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11946,"src":"33551:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":11952,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:59","typeDescriptions":{}}},"id":11955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:59","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":11957,"nodeType":"ExpressionStatement","src":"33532:25:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11958,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11949,"src":"33571:10:59","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11946,"src":"33585:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11967,"nodeType":"IfStatement","src":"33567:97:59","trueBody":{"id":11966,"nodeType":"Block","src":"33592:72:59","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":11962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:59","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":11963,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11946,"src":"33647:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11961,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"33613:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11965,"nodeType":"RevertStatement","src":"33606:47:59"}]}}]},"documentation":{"id":11944,"nodeType":"StructuredDocumentation","src":"33138:307:59","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":11969,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:59","nodeType":"FunctionDefinition","parameters":{"id":11947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11946,"mutability":"mutable","name":"value","nameLocation":"33474:5:59","nodeType":"VariableDeclaration","scope":11969,"src":"33467:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11945,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:59"},"returnParameters":{"id":11950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11949,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:59","nodeType":"VariableDeclaration","scope":11969,"src":"33504:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":11948,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:59","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:59"},"scope":12026,"src":"33450:220:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11994,"nodeType":"Block","src":"34053:146:59","statements":[{"expression":{"id":11982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11977,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11975,"src":"34063:10:59","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11980,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11972,"src":"34081:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11979,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":11978,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:59","typeDescriptions":{}}},"id":11981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:59","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":11983,"nodeType":"ExpressionStatement","src":"34063:24:59"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":11986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11984,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11975,"src":"34101:10:59","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11985,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11972,"src":"34115:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11993,"nodeType":"IfStatement","src":"34097:96:59","trueBody":{"id":11992,"nodeType":"Block","src":"34122:71:59","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":11988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:59","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":11989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11972,"src":"34176:5:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":11987,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10293,"src":"34143:29:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":11990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11991,"nodeType":"RevertStatement","src":"34136:46:59"}]}}]},"documentation":{"id":11970,"nodeType":"StructuredDocumentation","src":"33676:302:59","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":11995,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:59","nodeType":"FunctionDefinition","parameters":{"id":11973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11972,"mutability":"mutable","name":"value","nameLocation":"34006:5:59","nodeType":"VariableDeclaration","scope":11995,"src":"33999:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11971,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:59"},"returnParameters":{"id":11976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11975,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:59","nodeType":"VariableDeclaration","scope":11995,"src":"34036:15:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":11974,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:59","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:59"},"scope":12026,"src":"33983:216:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12024,"nodeType":"Block","src":"34439:250:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12003,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11998,"src":"34552:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":12008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":12007,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:59","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":12006,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":12010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:59","memberName":"max","nodeType":"MemberAccess","src":"34568:16:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12004,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:59","typeDescriptions":{}}},"id":12011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12018,"nodeType":"IfStatement","src":"34548:105:59","trueBody":{"id":12017,"nodeType":"Block","src":"34587:66:59","statements":[{"errorCall":{"arguments":[{"id":12014,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11998,"src":"34636:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12013,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10298,"src":"34608:27:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":12015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12016,"nodeType":"RevertStatement","src":"34601:41:59"}]}},{"expression":{"arguments":[{"id":12021,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11998,"src":"34676:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:59","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":12019,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:59","typeDescriptions":{}}},"id":12022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":12002,"id":12023,"nodeType":"Return","src":"34662:20:59"}]},"documentation":{"id":11996,"nodeType":"StructuredDocumentation","src":"34205:165:59","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":12025,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:59","nodeType":"FunctionDefinition","parameters":{"id":11999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11998,"mutability":"mutable","name":"value","nameLocation":"34401:5:59","nodeType":"VariableDeclaration","scope":12025,"src":"34393:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11997,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:59"},"returnParameters":{"id":12002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12001,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12025,"src":"34431:6:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12000,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:59","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:59"},"scope":12026,"src":"34375:314:59","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12027,"src":"764:33927:59","usedErrors":[10281,10286,10293,10298],"usedEvents":[]}],"src":"192:34500:59"},"id":59},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","exportedSymbols":{"EnumerableSet":[12639]},"id":12640,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12028,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"205:24:60"},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":12029,"nodeType":"StructuredDocumentation","src":"231:1098:60","text":" @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```solidity\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```\n As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n and `uint256` (`UintSet`) are supported.\n [WARNING]\n ====\n Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n unusable.\n See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n array of EnumerableSet.\n ===="},"fullyImplemented":true,"id":12639,"linearizedBaseContracts":[12639],"name":"EnumerableSet","nameLocation":"1338:13:60","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.Set","id":12037,"members":[{"constant":false,"id":12032,"mutability":"mutable","name":"_values","nameLocation":"1862:7:60","nodeType":"VariableDeclaration","scope":12037,"src":"1852:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12030,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1852:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12031,"nodeType":"ArrayTypeName","src":"1852:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12036,"mutability":"mutable","name":"_positions","nameLocation":"2054:10:60","nodeType":"VariableDeclaration","scope":12037,"src":"2020:44:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":12035,"keyName":"value","keyNameLocation":"2036:5:60","keyType":{"id":12033,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2028:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2020:33:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":12034,"name":"uint256","nodeType":"ElementaryTypeName","src":"2045:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"Set","nameLocation":"1805:3:60","nodeType":"StructDefinition","scope":12639,"src":"1798:273:60","visibility":"public"},{"body":{"id":12078,"nodeType":"Block","src":"2310:337:60","statements":[{"condition":{"id":12052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2324:22:60","subExpression":{"arguments":[{"id":12049,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12041,"src":"2335:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},{"id":12050,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12043,"src":"2340:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12048,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12182,"src":"2325:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":12051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2325:21:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12076,"nodeType":"Block","src":"2604:37:60","statements":[{"expression":{"hexValue":"66616c7365","id":12074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2625:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":12047,"id":12075,"nodeType":"Return","src":"2618:12:60"}]},"id":12077,"nodeType":"IfStatement","src":"2320:321:60","trueBody":{"id":12073,"nodeType":"Block","src":"2348:250:60","statements":[{"expression":{"arguments":[{"id":12058,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12043,"src":"2379:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":12053,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12041,"src":"2362:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2366:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"2362:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2374:4:60","memberName":"push","nodeType":"MemberAccess","src":"2362:16:60","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer,bytes32)"}},"id":12059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2362:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12060,"nodeType":"ExpressionStatement","src":"2362:23:60"},{"expression":{"id":12069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":12061,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12041,"src":"2520:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12064,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2524:10:60","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":12036,"src":"2520:14:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":12065,"indexExpression":{"id":12063,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12043,"src":"2535:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2520:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":12066,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12041,"src":"2544:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2548:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"2544:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2556:6:60","memberName":"length","nodeType":"MemberAccess","src":"2544:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2520:42:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12070,"nodeType":"ExpressionStatement","src":"2520:42:60"},{"expression":{"hexValue":"74727565","id":12071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2583:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12047,"id":12072,"nodeType":"Return","src":"2576:11:60"}]}}]},"documentation":{"id":12038,"nodeType":"StructuredDocumentation","src":"2077:159:60","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":12079,"implemented":true,"kind":"function","modifiers":[],"name":"_add","nameLocation":"2250:4:60","nodeType":"FunctionDefinition","parameters":{"id":12044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12041,"mutability":"mutable","name":"set","nameLocation":"2267:3:60","nodeType":"VariableDeclaration","scope":12079,"src":"2255:15:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12040,"nodeType":"UserDefinedTypeName","pathNode":{"id":12039,"name":"Set","nameLocations":["2255:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"2255:3:60"},"referencedDeclaration":12037,"src":"2255:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":12043,"mutability":"mutable","name":"value","nameLocation":"2280:5:60","nodeType":"VariableDeclaration","scope":12079,"src":"2272:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12042,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2272:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2254:32:60"},"returnParameters":{"id":12047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12079,"src":"2304:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12045,"name":"bool","nodeType":"ElementaryTypeName","src":"2304:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2303:6:60"},"scope":12639,"src":"2241:406:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":12162,"nodeType":"Block","src":"2887:1296:60","statements":[{"assignments":[12091],"declarations":[{"constant":false,"id":12091,"mutability":"mutable","name":"position","nameLocation":"2999:8:60","nodeType":"VariableDeclaration","scope":12162,"src":"2991:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12090,"name":"uint256","nodeType":"ElementaryTypeName","src":"2991:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12096,"initialValue":{"baseExpression":{"expression":{"id":12092,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3010:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3014:10:60","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":12036,"src":"3010:14:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":12095,"indexExpression":{"id":12094,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12085,"src":"3025:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3010:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2991:40:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12097,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12091,"src":"3046:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3058:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3046:13:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12160,"nodeType":"Block","src":"4140:37:60","statements":[{"expression":{"hexValue":"66616c7365","id":12158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4161:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":12089,"id":12159,"nodeType":"Return","src":"4154:12:60"}]},"id":12161,"nodeType":"IfStatement","src":"3042:1135:60","trueBody":{"id":12157,"nodeType":"Block","src":"3061:1073:60","statements":[{"assignments":[12101],"declarations":[{"constant":false,"id":12101,"mutability":"mutable","name":"valueIndex","nameLocation":"3421:10:60","nodeType":"VariableDeclaration","scope":12157,"src":"3413:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12100,"name":"uint256","nodeType":"ElementaryTypeName","src":"3413:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12105,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12102,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12091,"src":"3434:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3445:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3434:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3413:33:60"},{"assignments":[12107],"declarations":[{"constant":false,"id":12107,"mutability":"mutable","name":"lastIndex","nameLocation":"3468:9:60","nodeType":"VariableDeclaration","scope":12157,"src":"3460:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12106,"name":"uint256","nodeType":"ElementaryTypeName","src":"3460:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12113,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":12108,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3480:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3484:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"3480:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3492:6:60","memberName":"length","nodeType":"MemberAccess","src":"3480:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3501:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3480:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3460:42:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12114,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12101,"src":"3521:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12115,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12107,"src":"3535:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3521:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12141,"nodeType":"IfStatement","src":"3517:378:60","trueBody":{"id":12140,"nodeType":"Block","src":"3546:349:60","statements":[{"assignments":[12118],"declarations":[{"constant":false,"id":12118,"mutability":"mutable","name":"lastValue","nameLocation":"3572:9:60","nodeType":"VariableDeclaration","scope":12140,"src":"3564:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12117,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3564:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12123,"initialValue":{"baseExpression":{"expression":{"id":12119,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3584:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3588:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"3584:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12122,"indexExpression":{"id":12121,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12107,"src":"3596:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3584:22:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3564:42:60"},{"expression":{"id":12130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":12124,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3705:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3709:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"3705:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12128,"indexExpression":{"id":12126,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12101,"src":"3717:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3705:23:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12129,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12118,"src":"3731:9:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3705:35:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12131,"nodeType":"ExpressionStatement","src":"3705:35:60"},{"expression":{"id":12138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":12132,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3844:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3848:10:60","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":12036,"src":"3844:14:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":12136,"indexExpression":{"id":12134,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12118,"src":"3859:9:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3844:25:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12137,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12091,"src":"3872:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3844:36:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12139,"nodeType":"ExpressionStatement","src":"3844:36:60"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":12142,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3973:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3977:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"3973:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3985:3:60","memberName":"pop","nodeType":"MemberAccess","src":"3973:15:60","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer)"}},"id":12147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3973:17:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12148,"nodeType":"ExpressionStatement","src":"3973:17:60"},{"expression":{"id":12153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4069:28:60","subExpression":{"baseExpression":{"expression":{"id":12149,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"4076:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12150,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4080:10:60","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":12036,"src":"4076:14:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":12152,"indexExpression":{"id":12151,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12085,"src":"4091:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4076:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12154,"nodeType":"ExpressionStatement","src":"4069:28:60"},{"expression":{"hexValue":"74727565","id":12155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4119:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":12089,"id":12156,"nodeType":"Return","src":"4112:11:60"}]}}]},"documentation":{"id":12080,"nodeType":"StructuredDocumentation","src":"2653:157:60","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":12163,"implemented":true,"kind":"function","modifiers":[],"name":"_remove","nameLocation":"2824:7:60","nodeType":"FunctionDefinition","parameters":{"id":12086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12083,"mutability":"mutable","name":"set","nameLocation":"2844:3:60","nodeType":"VariableDeclaration","scope":12163,"src":"2832:15:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12082,"nodeType":"UserDefinedTypeName","pathNode":{"id":12081,"name":"Set","nameLocations":["2832:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"2832:3:60"},"referencedDeclaration":12037,"src":"2832:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":12085,"mutability":"mutable","name":"value","nameLocation":"2857:5:60","nodeType":"VariableDeclaration","scope":12163,"src":"2849:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12084,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2849:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2831:32:60"},"returnParameters":{"id":12089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12163,"src":"2881:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12087,"name":"bool","nodeType":"ElementaryTypeName","src":"2881:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2880:6:60"},"scope":12639,"src":"2815:1368:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":12181,"nodeType":"Block","src":"4343:50:60","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":12174,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12167,"src":"4360:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4364:10:60","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":12036,"src":"4360:14:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":12177,"indexExpression":{"id":12176,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12169,"src":"4375:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4360:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4385:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4360:26:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12173,"id":12180,"nodeType":"Return","src":"4353:33:60"}]},"documentation":{"id":12164,"nodeType":"StructuredDocumentation","src":"4189:70:60","text":" @dev Returns true if the value is in the set. O(1)."},"id":12182,"implemented":true,"kind":"function","modifiers":[],"name":"_contains","nameLocation":"4273:9:60","nodeType":"FunctionDefinition","parameters":{"id":12170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12167,"mutability":"mutable","name":"set","nameLocation":"4295:3:60","nodeType":"VariableDeclaration","scope":12182,"src":"4283:15:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12166,"nodeType":"UserDefinedTypeName","pathNode":{"id":12165,"name":"Set","nameLocations":["4283:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"4283:3:60"},"referencedDeclaration":12037,"src":"4283:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":12169,"mutability":"mutable","name":"value","nameLocation":"4308:5:60","nodeType":"VariableDeclaration","scope":12182,"src":"4300:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4300:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4282:32:60"},"returnParameters":{"id":12173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12182,"src":"4337:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12171,"name":"bool","nodeType":"ElementaryTypeName","src":"4337:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4336:6:60"},"scope":12639,"src":"4264:129:60","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":12195,"nodeType":"Block","src":"4539:42:60","statements":[{"expression":{"expression":{"expression":{"id":12191,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12186,"src":"4556:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12192,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4560:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"4556:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4568:6:60","memberName":"length","nodeType":"MemberAccess","src":"4556:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12190,"id":12194,"nodeType":"Return","src":"4549:25:60"}]},"documentation":{"id":12183,"nodeType":"StructuredDocumentation","src":"4399:70:60","text":" @dev Returns the number of values on the set. O(1)."},"id":12196,"implemented":true,"kind":"function","modifiers":[],"name":"_length","nameLocation":"4483:7:60","nodeType":"FunctionDefinition","parameters":{"id":12187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12186,"mutability":"mutable","name":"set","nameLocation":"4503:3:60","nodeType":"VariableDeclaration","scope":12196,"src":"4491:15:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12185,"nodeType":"UserDefinedTypeName","pathNode":{"id":12184,"name":"Set","nameLocations":["4491:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"4491:3:60"},"referencedDeclaration":12037,"src":"4491:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"4490:17:60"},"returnParameters":{"id":12190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12196,"src":"4530:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12188,"name":"uint256","nodeType":"ElementaryTypeName","src":"4530:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4529:9:60"},"scope":12639,"src":"4474:107:60","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":12212,"nodeType":"Block","src":"4999:42:60","statements":[{"expression":{"baseExpression":{"expression":{"id":12207,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12200,"src":"5016:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5020:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"5016:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":12210,"indexExpression":{"id":12209,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12202,"src":"5028:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5016:18:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12206,"id":12211,"nodeType":"Return","src":"5009:25:60"}]},"documentation":{"id":12197,"nodeType":"StructuredDocumentation","src":"4587:331:60","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":12213,"implemented":true,"kind":"function","modifiers":[],"name":"_at","nameLocation":"4932:3:60","nodeType":"FunctionDefinition","parameters":{"id":12203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12200,"mutability":"mutable","name":"set","nameLocation":"4948:3:60","nodeType":"VariableDeclaration","scope":12213,"src":"4936:15:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12199,"nodeType":"UserDefinedTypeName","pathNode":{"id":12198,"name":"Set","nameLocations":["4936:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"4936:3:60"},"referencedDeclaration":12037,"src":"4936:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":12202,"mutability":"mutable","name":"index","nameLocation":"4961:5:60","nodeType":"VariableDeclaration","scope":12213,"src":"4953:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12201,"name":"uint256","nodeType":"ElementaryTypeName","src":"4953:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4935:32:60"},"returnParameters":{"id":12206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12213,"src":"4990:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12204,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4990:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4989:9:60"},"scope":12639,"src":"4923:118:60","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":12226,"nodeType":"Block","src":"5655:35:60","statements":[{"expression":{"expression":{"id":12223,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12217,"src":"5672:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":12224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5676:7:60","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":12032,"src":"5672:11:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"functionReturnParameters":12222,"id":12225,"nodeType":"Return","src":"5665:18:60"}]},"documentation":{"id":12214,"nodeType":"StructuredDocumentation","src":"5047:529:60","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":12227,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"5590:7:60","nodeType":"FunctionDefinition","parameters":{"id":12218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12217,"mutability":"mutable","name":"set","nameLocation":"5610:3:60","nodeType":"VariableDeclaration","scope":12227,"src":"5598:15:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12216,"nodeType":"UserDefinedTypeName","pathNode":{"id":12215,"name":"Set","nameLocations":["5598:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"5598:3:60"},"referencedDeclaration":12037,"src":"5598:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"5597:17:60"},"returnParameters":{"id":12222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12221,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12227,"src":"5637:16:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12219,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5637:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12220,"nodeType":"ArrayTypeName","src":"5637:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"5636:18:60"},"scope":12639,"src":"5581:109:60","stateMutability":"view","virtual":false,"visibility":"private"},{"canonicalName":"EnumerableSet.Bytes32Set","id":12231,"members":[{"constant":false,"id":12230,"mutability":"mutable","name":"_inner","nameLocation":"5747:6:60","nodeType":"VariableDeclaration","scope":12231,"src":"5743:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12229,"nodeType":"UserDefinedTypeName","pathNode":{"id":12228,"name":"Set","nameLocations":["5743:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"5743:3:60"},"referencedDeclaration":12037,"src":"5743:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"Bytes32Set","nameLocation":"5722:10:60","nodeType":"StructDefinition","scope":12639,"src":"5715:45:60","visibility":"public"},{"body":{"id":12248,"nodeType":"Block","src":"6006:47:60","statements":[{"expression":{"arguments":[{"expression":{"id":12243,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12235,"src":"6028:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":12244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6032:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12230,"src":"6028:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":12245,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12237,"src":"6040:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12242,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12079,"src":"6023:4:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":12246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6023:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12241,"id":12247,"nodeType":"Return","src":"6016:30:60"}]},"documentation":{"id":12232,"nodeType":"StructuredDocumentation","src":"5766:159:60","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":12249,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"5939:3:60","nodeType":"FunctionDefinition","parameters":{"id":12238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12235,"mutability":"mutable","name":"set","nameLocation":"5962:3:60","nodeType":"VariableDeclaration","scope":12249,"src":"5943:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":12234,"nodeType":"UserDefinedTypeName","pathNode":{"id":12233,"name":"Bytes32Set","nameLocations":["5943:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12231,"src":"5943:10:60"},"referencedDeclaration":12231,"src":"5943:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":12237,"mutability":"mutable","name":"value","nameLocation":"5975:5:60","nodeType":"VariableDeclaration","scope":12249,"src":"5967:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12236,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5967:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5942:39:60"},"returnParameters":{"id":12241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12249,"src":"6000:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12239,"name":"bool","nodeType":"ElementaryTypeName","src":"6000:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5999:6:60"},"scope":12639,"src":"5930:123:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12266,"nodeType":"Block","src":"6300:50:60","statements":[{"expression":{"arguments":[{"expression":{"id":12261,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12253,"src":"6325:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":12262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6329:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12230,"src":"6325:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":12263,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12255,"src":"6337:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12260,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12163,"src":"6317:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":12264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6317:26:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12259,"id":12265,"nodeType":"Return","src":"6310:33:60"}]},"documentation":{"id":12250,"nodeType":"StructuredDocumentation","src":"6059:157:60","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":12267,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"6230:6:60","nodeType":"FunctionDefinition","parameters":{"id":12256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12253,"mutability":"mutable","name":"set","nameLocation":"6256:3:60","nodeType":"VariableDeclaration","scope":12267,"src":"6237:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":12252,"nodeType":"UserDefinedTypeName","pathNode":{"id":12251,"name":"Bytes32Set","nameLocations":["6237:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12231,"src":"6237:10:60"},"referencedDeclaration":12231,"src":"6237:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":12255,"mutability":"mutable","name":"value","nameLocation":"6269:5:60","nodeType":"VariableDeclaration","scope":12267,"src":"6261:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12254,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6261:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6236:39:60"},"returnParameters":{"id":12259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12267,"src":"6294:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12257,"name":"bool","nodeType":"ElementaryTypeName","src":"6294:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6293:6:60"},"scope":12639,"src":"6221:129:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12284,"nodeType":"Block","src":"6517:52:60","statements":[{"expression":{"arguments":[{"expression":{"id":12279,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12271,"src":"6544:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":12280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6548:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12230,"src":"6544:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":12281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12273,"src":"6556:5:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12278,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12182,"src":"6534:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":12282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6534:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12277,"id":12283,"nodeType":"Return","src":"6527:35:60"}]},"documentation":{"id":12268,"nodeType":"StructuredDocumentation","src":"6356:70:60","text":" @dev Returns true if the value is in the set. O(1)."},"id":12285,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"6440:8:60","nodeType":"FunctionDefinition","parameters":{"id":12274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12271,"mutability":"mutable","name":"set","nameLocation":"6468:3:60","nodeType":"VariableDeclaration","scope":12285,"src":"6449:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":12270,"nodeType":"UserDefinedTypeName","pathNode":{"id":12269,"name":"Bytes32Set","nameLocations":["6449:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12231,"src":"6449:10:60"},"referencedDeclaration":12231,"src":"6449:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":12273,"mutability":"mutable","name":"value","nameLocation":"6481:5:60","nodeType":"VariableDeclaration","scope":12285,"src":"6473:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12272,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6473:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6448:39:60"},"returnParameters":{"id":12277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12276,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12285,"src":"6511:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12275,"name":"bool","nodeType":"ElementaryTypeName","src":"6511:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6510:6:60"},"scope":12639,"src":"6431:138:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12299,"nodeType":"Block","src":"6722:43:60","statements":[{"expression":{"arguments":[{"expression":{"id":12295,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12289,"src":"6747:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":12296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6751:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12230,"src":"6747:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":12294,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12196,"src":"6739:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":12297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6739:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12293,"id":12298,"nodeType":"Return","src":"6732:26:60"}]},"documentation":{"id":12286,"nodeType":"StructuredDocumentation","src":"6575:70:60","text":" @dev Returns the number of values in the set. O(1)."},"id":12300,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"6659:6:60","nodeType":"FunctionDefinition","parameters":{"id":12290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12289,"mutability":"mutable","name":"set","nameLocation":"6685:3:60","nodeType":"VariableDeclaration","scope":12300,"src":"6666:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":12288,"nodeType":"UserDefinedTypeName","pathNode":{"id":12287,"name":"Bytes32Set","nameLocations":["6666:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12231,"src":"6666:10:60"},"referencedDeclaration":12231,"src":"6666:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"6665:24:60"},"returnParameters":{"id":12293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12300,"src":"6713:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12291,"name":"uint256","nodeType":"ElementaryTypeName","src":"6713:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6712:9:60"},"scope":12639,"src":"6650:115:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12317,"nodeType":"Block","src":"7190:46:60","statements":[{"expression":{"arguments":[{"expression":{"id":12312,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"7211:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":12313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7215:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12230,"src":"7211:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":12314,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12306,"src":"7223:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12311,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12213,"src":"7207:3:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":12315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7207:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12310,"id":12316,"nodeType":"Return","src":"7200:29:60"}]},"documentation":{"id":12301,"nodeType":"StructuredDocumentation","src":"6771:331:60","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":12318,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"7116:2:60","nodeType":"FunctionDefinition","parameters":{"id":12307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12304,"mutability":"mutable","name":"set","nameLocation":"7138:3:60","nodeType":"VariableDeclaration","scope":12318,"src":"7119:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":12303,"nodeType":"UserDefinedTypeName","pathNode":{"id":12302,"name":"Bytes32Set","nameLocations":["7119:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12231,"src":"7119:10:60"},"referencedDeclaration":12231,"src":"7119:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":12306,"mutability":"mutable","name":"index","nameLocation":"7151:5:60","nodeType":"VariableDeclaration","scope":12318,"src":"7143:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12305,"name":"uint256","nodeType":"ElementaryTypeName","src":"7143:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7118:39:60"},"returnParameters":{"id":12310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12318,"src":"7181:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12308,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7181:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7180:9:60"},"scope":12639,"src":"7107:129:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12347,"nodeType":"Block","src":"7857:219:60","statements":[{"assignments":[12332],"declarations":[{"constant":false,"id":12332,"mutability":"mutable","name":"store","nameLocation":"7884:5:60","nodeType":"VariableDeclaration","scope":12347,"src":"7867:22:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7867:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12331,"nodeType":"ArrayTypeName","src":"7867:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":12337,"initialValue":{"arguments":[{"expression":{"id":12334,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12322,"src":"7900:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":12335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7904:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12230,"src":"7900:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":12333,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12227,"src":"7892:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":12336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7892:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7867:44:60"},{"assignments":[12342],"declarations":[{"constant":false,"id":12342,"mutability":"mutable","name":"result","nameLocation":"7938:6:60","nodeType":"VariableDeclaration","scope":12347,"src":"7921:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12340,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7921:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12341,"nodeType":"ArrayTypeName","src":"7921:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":12343,"nodeType":"VariableDeclarationStatement","src":"7921:23:60"},{"AST":{"nativeSrc":"8007:39:60","nodeType":"YulBlock","src":"8007:39:60","statements":[{"nativeSrc":"8021:15:60","nodeType":"YulAssignment","src":"8021:15:60","value":{"name":"store","nativeSrc":"8031:5:60","nodeType":"YulIdentifier","src":"8031:5:60"},"variableNames":[{"name":"result","nativeSrc":"8021:6:60","nodeType":"YulIdentifier","src":"8021:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":12342,"isOffset":false,"isSlot":false,"src":"8021:6:60","valueSize":1},{"declaration":12332,"isOffset":false,"isSlot":false,"src":"8031:5:60","valueSize":1}],"id":12344,"nodeType":"InlineAssembly","src":"7998:48:60"},{"expression":{"id":12345,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12342,"src":"8063:6:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":12327,"id":12346,"nodeType":"Return","src":"8056:13:60"}]},"documentation":{"id":12319,"nodeType":"StructuredDocumentation","src":"7242:529:60","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":12348,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"7785:6:60","nodeType":"FunctionDefinition","parameters":{"id":12323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12322,"mutability":"mutable","name":"set","nameLocation":"7811:3:60","nodeType":"VariableDeclaration","scope":12348,"src":"7792:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":12321,"nodeType":"UserDefinedTypeName","pathNode":{"id":12320,"name":"Bytes32Set","nameLocations":["7792:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12231,"src":"7792:10:60"},"referencedDeclaration":12231,"src":"7792:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$12231_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"7791:24:60"},"returnParameters":{"id":12327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12348,"src":"7839:16:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7839:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12325,"nodeType":"ArrayTypeName","src":"7839:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7838:18:60"},"scope":12639,"src":"7776:300:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.AddressSet","id":12352,"members":[{"constant":false,"id":12351,"mutability":"mutable","name":"_inner","nameLocation":"8133:6:60","nodeType":"VariableDeclaration","scope":12352,"src":"8129:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12350,"nodeType":"UserDefinedTypeName","pathNode":{"id":12349,"name":"Set","nameLocations":["8129:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"8129:3:60"},"referencedDeclaration":12037,"src":"8129:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"8108:10:60","nodeType":"StructDefinition","scope":12639,"src":"8101:45:60","visibility":"public"},{"body":{"id":12378,"nodeType":"Block","src":"8392:74:60","statements":[{"expression":{"arguments":[{"expression":{"id":12364,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12356,"src":"8414:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":12365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8418:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12351,"src":"8414:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":12372,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12358,"src":"8450:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8442:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":12370,"name":"uint160","nodeType":"ElementaryTypeName","src":"8442:7:60","typeDescriptions":{}}},"id":12373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8442:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":12369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8434:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12368,"name":"uint256","nodeType":"ElementaryTypeName","src":"8434:7:60","typeDescriptions":{}}},"id":12374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8434:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8426:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12366,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8426:7:60","typeDescriptions":{}}},"id":12375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8426:32:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12363,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12079,"src":"8409:4:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":12376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8409:50:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12362,"id":12377,"nodeType":"Return","src":"8402:57:60"}]},"documentation":{"id":12353,"nodeType":"StructuredDocumentation","src":"8152:159:60","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":12379,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"8325:3:60","nodeType":"FunctionDefinition","parameters":{"id":12359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12356,"mutability":"mutable","name":"set","nameLocation":"8348:3:60","nodeType":"VariableDeclaration","scope":12379,"src":"8329:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":12355,"nodeType":"UserDefinedTypeName","pathNode":{"id":12354,"name":"AddressSet","nameLocations":["8329:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"8329:10:60"},"referencedDeclaration":12352,"src":"8329:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":12358,"mutability":"mutable","name":"value","nameLocation":"8361:5:60","nodeType":"VariableDeclaration","scope":12379,"src":"8353:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12357,"name":"address","nodeType":"ElementaryTypeName","src":"8353:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8328:39:60"},"returnParameters":{"id":12362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12379,"src":"8386:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12360,"name":"bool","nodeType":"ElementaryTypeName","src":"8386:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8385:6:60"},"scope":12639,"src":"8316:150:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12405,"nodeType":"Block","src":"8713:77:60","statements":[{"expression":{"arguments":[{"expression":{"id":12391,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12383,"src":"8738:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":12392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8742:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12351,"src":"8738:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":12399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12385,"src":"8774:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8766:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":12397,"name":"uint160","nodeType":"ElementaryTypeName","src":"8766:7:60","typeDescriptions":{}}},"id":12400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8766:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":12396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8758:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12395,"name":"uint256","nodeType":"ElementaryTypeName","src":"8758:7:60","typeDescriptions":{}}},"id":12401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8758:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12394,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8750:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8750:7:60","typeDescriptions":{}}},"id":12402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8750:32:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12390,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12163,"src":"8730:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":12403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8730:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12389,"id":12404,"nodeType":"Return","src":"8723:60:60"}]},"documentation":{"id":12380,"nodeType":"StructuredDocumentation","src":"8472:157:60","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":12406,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"8643:6:60","nodeType":"FunctionDefinition","parameters":{"id":12386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12383,"mutability":"mutable","name":"set","nameLocation":"8669:3:60","nodeType":"VariableDeclaration","scope":12406,"src":"8650:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":12382,"nodeType":"UserDefinedTypeName","pathNode":{"id":12381,"name":"AddressSet","nameLocations":["8650:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"8650:10:60"},"referencedDeclaration":12352,"src":"8650:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":12385,"mutability":"mutable","name":"value","nameLocation":"8682:5:60","nodeType":"VariableDeclaration","scope":12406,"src":"8674:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12384,"name":"address","nodeType":"ElementaryTypeName","src":"8674:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8649:39:60"},"returnParameters":{"id":12389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12388,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12406,"src":"8707:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12387,"name":"bool","nodeType":"ElementaryTypeName","src":"8707:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8706:6:60"},"scope":12639,"src":"8634:156:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12432,"nodeType":"Block","src":"8957:79:60","statements":[{"expression":{"arguments":[{"expression":{"id":12418,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12410,"src":"8984:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":12419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8988:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12351,"src":"8984:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":12426,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12412,"src":"9020:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9012:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":12424,"name":"uint160","nodeType":"ElementaryTypeName","src":"9012:7:60","typeDescriptions":{}}},"id":12427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9012:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":12423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9004:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12422,"name":"uint256","nodeType":"ElementaryTypeName","src":"9004:7:60","typeDescriptions":{}}},"id":12428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9004:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8996:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12420,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8996:7:60","typeDescriptions":{}}},"id":12429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8996:32:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12417,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12182,"src":"8974:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":12430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8974:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12416,"id":12431,"nodeType":"Return","src":"8967:62:60"}]},"documentation":{"id":12407,"nodeType":"StructuredDocumentation","src":"8796:70:60","text":" @dev Returns true if the value is in the set. O(1)."},"id":12433,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"8880:8:60","nodeType":"FunctionDefinition","parameters":{"id":12413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12410,"mutability":"mutable","name":"set","nameLocation":"8908:3:60","nodeType":"VariableDeclaration","scope":12433,"src":"8889:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":12409,"nodeType":"UserDefinedTypeName","pathNode":{"id":12408,"name":"AddressSet","nameLocations":["8889:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"8889:10:60"},"referencedDeclaration":12352,"src":"8889:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":12412,"mutability":"mutable","name":"value","nameLocation":"8921:5:60","nodeType":"VariableDeclaration","scope":12433,"src":"8913:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12411,"name":"address","nodeType":"ElementaryTypeName","src":"8913:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8888:39:60"},"returnParameters":{"id":12416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12433,"src":"8951:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12414,"name":"bool","nodeType":"ElementaryTypeName","src":"8951:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8950:6:60"},"scope":12639,"src":"8871:165:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12447,"nodeType":"Block","src":"9189:43:60","statements":[{"expression":{"arguments":[{"expression":{"id":12443,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12437,"src":"9214:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":12444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9218:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12351,"src":"9214:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":12442,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12196,"src":"9206:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":12445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9206:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12441,"id":12446,"nodeType":"Return","src":"9199:26:60"}]},"documentation":{"id":12434,"nodeType":"StructuredDocumentation","src":"9042:70:60","text":" @dev Returns the number of values in the set. O(1)."},"id":12448,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"9126:6:60","nodeType":"FunctionDefinition","parameters":{"id":12438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12437,"mutability":"mutable","name":"set","nameLocation":"9152:3:60","nodeType":"VariableDeclaration","scope":12448,"src":"9133:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":12436,"nodeType":"UserDefinedTypeName","pathNode":{"id":12435,"name":"AddressSet","nameLocations":["9133:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"9133:10:60"},"referencedDeclaration":12352,"src":"9133:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"9132:24:60"},"returnParameters":{"id":12441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12440,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12448,"src":"9180:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12439,"name":"uint256","nodeType":"ElementaryTypeName","src":"9180:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9179:9:60"},"scope":12639,"src":"9117:115:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12474,"nodeType":"Block","src":"9657:73:60","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":12466,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12452,"src":"9702:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":12467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9706:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12351,"src":"9702:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":12468,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12454,"src":"9714:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12465,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12213,"src":"9698:3:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":12469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9698:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9690:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12463,"name":"uint256","nodeType":"ElementaryTypeName","src":"9690:7:60","typeDescriptions":{}}},"id":12470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9690:31:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9682:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":12461,"name":"uint160","nodeType":"ElementaryTypeName","src":"9682:7:60","typeDescriptions":{}}},"id":12471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":12460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9674:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12459,"name":"address","nodeType":"ElementaryTypeName","src":"9674:7:60","typeDescriptions":{}}},"id":12472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9674:49:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12458,"id":12473,"nodeType":"Return","src":"9667:56:60"}]},"documentation":{"id":12449,"nodeType":"StructuredDocumentation","src":"9238:331:60","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":12475,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"9583:2:60","nodeType":"FunctionDefinition","parameters":{"id":12455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12452,"mutability":"mutable","name":"set","nameLocation":"9605:3:60","nodeType":"VariableDeclaration","scope":12475,"src":"9586:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":12451,"nodeType":"UserDefinedTypeName","pathNode":{"id":12450,"name":"AddressSet","nameLocations":["9586:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"9586:10:60"},"referencedDeclaration":12352,"src":"9586:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":12454,"mutability":"mutable","name":"index","nameLocation":"9618:5:60","nodeType":"VariableDeclaration","scope":12475,"src":"9610:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12453,"name":"uint256","nodeType":"ElementaryTypeName","src":"9610:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9585:39:60"},"returnParameters":{"id":12458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12457,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12475,"src":"9648:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12456,"name":"address","nodeType":"ElementaryTypeName","src":"9648:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9647:9:60"},"scope":12639,"src":"9574:156:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12504,"nodeType":"Block","src":"10351:219:60","statements":[{"assignments":[12489],"declarations":[{"constant":false,"id":12489,"mutability":"mutable","name":"store","nameLocation":"10378:5:60","nodeType":"VariableDeclaration","scope":12504,"src":"10361:22:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12487,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10361:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12488,"nodeType":"ArrayTypeName","src":"10361:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":12494,"initialValue":{"arguments":[{"expression":{"id":12491,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12479,"src":"10394:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":12492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10398:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12351,"src":"10394:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":12490,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12227,"src":"10386:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":12493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10386:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10361:44:60"},{"assignments":[12499],"declarations":[{"constant":false,"id":12499,"mutability":"mutable","name":"result","nameLocation":"10432:6:60","nodeType":"VariableDeclaration","scope":12504,"src":"10415:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12497,"name":"address","nodeType":"ElementaryTypeName","src":"10415:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12498,"nodeType":"ArrayTypeName","src":"10415:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":12500,"nodeType":"VariableDeclarationStatement","src":"10415:23:60"},{"AST":{"nativeSrc":"10501:39:60","nodeType":"YulBlock","src":"10501:39:60","statements":[{"nativeSrc":"10515:15:60","nodeType":"YulAssignment","src":"10515:15:60","value":{"name":"store","nativeSrc":"10525:5:60","nodeType":"YulIdentifier","src":"10525:5:60"},"variableNames":[{"name":"result","nativeSrc":"10515:6:60","nodeType":"YulIdentifier","src":"10515:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":12499,"isOffset":false,"isSlot":false,"src":"10515:6:60","valueSize":1},{"declaration":12489,"isOffset":false,"isSlot":false,"src":"10525:5:60","valueSize":1}],"id":12501,"nodeType":"InlineAssembly","src":"10492:48:60"},{"expression":{"id":12502,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12499,"src":"10557:6:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":12484,"id":12503,"nodeType":"Return","src":"10550:13:60"}]},"documentation":{"id":12476,"nodeType":"StructuredDocumentation","src":"9736:529:60","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":12505,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10279:6:60","nodeType":"FunctionDefinition","parameters":{"id":12480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12479,"mutability":"mutable","name":"set","nameLocation":"10305:3:60","nodeType":"VariableDeclaration","scope":12505,"src":"10286:22:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":12478,"nodeType":"UserDefinedTypeName","pathNode":{"id":12477,"name":"AddressSet","nameLocations":["10286:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"10286:10:60"},"referencedDeclaration":12352,"src":"10286:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"10285:24:60"},"returnParameters":{"id":12484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12505,"src":"10333:16:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12481,"name":"address","nodeType":"ElementaryTypeName","src":"10333:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12482,"nodeType":"ArrayTypeName","src":"10333:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"10332:18:60"},"scope":12639,"src":"10270:300:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.UintSet","id":12509,"members":[{"constant":false,"id":12508,"mutability":"mutable","name":"_inner","nameLocation":"10621:6:60","nodeType":"VariableDeclaration","scope":12509,"src":"10617:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":12507,"nodeType":"UserDefinedTypeName","pathNode":{"id":12506,"name":"Set","nameLocations":["10617:3:60"],"nodeType":"IdentifierPath","referencedDeclaration":12037,"src":"10617:3:60"},"referencedDeclaration":12037,"src":"10617:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"UintSet","nameLocation":"10599:7:60","nodeType":"StructDefinition","scope":12639,"src":"10592:42:60","visibility":"public"},{"body":{"id":12529,"nodeType":"Block","src":"10877:56:60","statements":[{"expression":{"arguments":[{"expression":{"id":12521,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12513,"src":"10899:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":12522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10903:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12508,"src":"10899:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":12525,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12515,"src":"10919:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10911:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10911:7:60","typeDescriptions":{}}},"id":12526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10911:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12520,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12079,"src":"10894:4:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":12527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10894:32:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12519,"id":12528,"nodeType":"Return","src":"10887:39:60"}]},"documentation":{"id":12510,"nodeType":"StructuredDocumentation","src":"10640:159:60","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":12530,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"10813:3:60","nodeType":"FunctionDefinition","parameters":{"id":12516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12513,"mutability":"mutable","name":"set","nameLocation":"10833:3:60","nodeType":"VariableDeclaration","scope":12530,"src":"10817:19:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":12512,"nodeType":"UserDefinedTypeName","pathNode":{"id":12511,"name":"UintSet","nameLocations":["10817:7:60"],"nodeType":"IdentifierPath","referencedDeclaration":12509,"src":"10817:7:60"},"referencedDeclaration":12509,"src":"10817:7:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":12515,"mutability":"mutable","name":"value","nameLocation":"10846:5:60","nodeType":"VariableDeclaration","scope":12530,"src":"10838:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12514,"name":"uint256","nodeType":"ElementaryTypeName","src":"10838:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10816:36:60"},"returnParameters":{"id":12519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12530,"src":"10871:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12517,"name":"bool","nodeType":"ElementaryTypeName","src":"10871:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10870:6:60"},"scope":12639,"src":"10804:129:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12550,"nodeType":"Block","src":"11177:59:60","statements":[{"expression":{"arguments":[{"expression":{"id":12542,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12534,"src":"11202:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":12543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11206:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12508,"src":"11202:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":12546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12536,"src":"11222:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11214:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11214:7:60","typeDescriptions":{}}},"id":12547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11214:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12541,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12163,"src":"11194:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":12548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11194:35:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12540,"id":12549,"nodeType":"Return","src":"11187:42:60"}]},"documentation":{"id":12531,"nodeType":"StructuredDocumentation","src":"10939:157:60","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":12551,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"11110:6:60","nodeType":"FunctionDefinition","parameters":{"id":12537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12534,"mutability":"mutable","name":"set","nameLocation":"11133:3:60","nodeType":"VariableDeclaration","scope":12551,"src":"11117:19:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":12533,"nodeType":"UserDefinedTypeName","pathNode":{"id":12532,"name":"UintSet","nameLocations":["11117:7:60"],"nodeType":"IdentifierPath","referencedDeclaration":12509,"src":"11117:7:60"},"referencedDeclaration":12509,"src":"11117:7:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":12536,"mutability":"mutable","name":"value","nameLocation":"11146:5:60","nodeType":"VariableDeclaration","scope":12551,"src":"11138:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12535,"name":"uint256","nodeType":"ElementaryTypeName","src":"11138:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11116:36:60"},"returnParameters":{"id":12540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12551,"src":"11171:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12538,"name":"bool","nodeType":"ElementaryTypeName","src":"11171:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11170:6:60"},"scope":12639,"src":"11101:135:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12571,"nodeType":"Block","src":"11400:61:60","statements":[{"expression":{"arguments":[{"expression":{"id":12563,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12555,"src":"11427:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":12564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11431:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12508,"src":"11427:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":12567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12557,"src":"11447:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11439:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12565,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11439:7:60","typeDescriptions":{}}},"id":12568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11439:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12562,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12182,"src":"11417:9:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":12569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11417:37:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12561,"id":12570,"nodeType":"Return","src":"11410:44:60"}]},"documentation":{"id":12552,"nodeType":"StructuredDocumentation","src":"11242:70:60","text":" @dev Returns true if the value is in the set. O(1)."},"id":12572,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"11326:8:60","nodeType":"FunctionDefinition","parameters":{"id":12558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12555,"mutability":"mutable","name":"set","nameLocation":"11351:3:60","nodeType":"VariableDeclaration","scope":12572,"src":"11335:19:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":12554,"nodeType":"UserDefinedTypeName","pathNode":{"id":12553,"name":"UintSet","nameLocations":["11335:7:60"],"nodeType":"IdentifierPath","referencedDeclaration":12509,"src":"11335:7:60"},"referencedDeclaration":12509,"src":"11335:7:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":12557,"mutability":"mutable","name":"value","nameLocation":"11364:5:60","nodeType":"VariableDeclaration","scope":12572,"src":"11356:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12556,"name":"uint256","nodeType":"ElementaryTypeName","src":"11356:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11334:36:60"},"returnParameters":{"id":12561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12572,"src":"11394:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12559,"name":"bool","nodeType":"ElementaryTypeName","src":"11394:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11393:6:60"},"scope":12639,"src":"11317:144:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12586,"nodeType":"Block","src":"11611:43:60","statements":[{"expression":{"arguments":[{"expression":{"id":12582,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12576,"src":"11636:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":12583,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11640:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12508,"src":"11636:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":12581,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12196,"src":"11628:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":12584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11628:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12580,"id":12585,"nodeType":"Return","src":"11621:26:60"}]},"documentation":{"id":12573,"nodeType":"StructuredDocumentation","src":"11467:70:60","text":" @dev Returns the number of values in the set. O(1)."},"id":12587,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"11551:6:60","nodeType":"FunctionDefinition","parameters":{"id":12577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12576,"mutability":"mutable","name":"set","nameLocation":"11574:3:60","nodeType":"VariableDeclaration","scope":12587,"src":"11558:19:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":12575,"nodeType":"UserDefinedTypeName","pathNode":{"id":12574,"name":"UintSet","nameLocations":["11558:7:60"],"nodeType":"IdentifierPath","referencedDeclaration":12509,"src":"11558:7:60"},"referencedDeclaration":12509,"src":"11558:7:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"11557:21:60"},"returnParameters":{"id":12580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12587,"src":"11602:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12578,"name":"uint256","nodeType":"ElementaryTypeName","src":"11602:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11601:9:60"},"scope":12639,"src":"11542:112:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12607,"nodeType":"Block","src":"12076:55:60","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":12601,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12591,"src":"12105:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":12602,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12109:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12508,"src":"12105:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":12603,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12593,"src":"12117:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12600,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12213,"src":"12101:3:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":12604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12101:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12093:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12598,"name":"uint256","nodeType":"ElementaryTypeName","src":"12093:7:60","typeDescriptions":{}}},"id":12605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12093:31:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12597,"id":12606,"nodeType":"Return","src":"12086:38:60"}]},"documentation":{"id":12588,"nodeType":"StructuredDocumentation","src":"11660:331:60","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":12608,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"12005:2:60","nodeType":"FunctionDefinition","parameters":{"id":12594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12591,"mutability":"mutable","name":"set","nameLocation":"12024:3:60","nodeType":"VariableDeclaration","scope":12608,"src":"12008:19:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":12590,"nodeType":"UserDefinedTypeName","pathNode":{"id":12589,"name":"UintSet","nameLocations":["12008:7:60"],"nodeType":"IdentifierPath","referencedDeclaration":12509,"src":"12008:7:60"},"referencedDeclaration":12509,"src":"12008:7:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":12593,"mutability":"mutable","name":"index","nameLocation":"12037:5:60","nodeType":"VariableDeclaration","scope":12608,"src":"12029:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12592,"name":"uint256","nodeType":"ElementaryTypeName","src":"12029:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12007:36:60"},"returnParameters":{"id":12597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12596,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12608,"src":"12067:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12595,"name":"uint256","nodeType":"ElementaryTypeName","src":"12067:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12066:9:60"},"scope":12639,"src":"11996:135:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12637,"nodeType":"Block","src":"12749:219:60","statements":[{"assignments":[12622],"declarations":[{"constant":false,"id":12622,"mutability":"mutable","name":"store","nameLocation":"12776:5:60","nodeType":"VariableDeclaration","scope":12637,"src":"12759:22:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12620,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12759:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12621,"nodeType":"ArrayTypeName","src":"12759:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":12627,"initialValue":{"arguments":[{"expression":{"id":12624,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12612,"src":"12792:3:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":12625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12796:6:60","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":12508,"src":"12792:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$12037_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":12623,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12227,"src":"12784:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$12037_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":12626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12784:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12759:44:60"},{"assignments":[12632],"declarations":[{"constant":false,"id":12632,"mutability":"mutable","name":"result","nameLocation":"12830:6:60","nodeType":"VariableDeclaration","scope":12637,"src":"12813:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12630,"name":"uint256","nodeType":"ElementaryTypeName","src":"12813:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12631,"nodeType":"ArrayTypeName","src":"12813:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":12633,"nodeType":"VariableDeclarationStatement","src":"12813:23:60"},{"AST":{"nativeSrc":"12899:39:60","nodeType":"YulBlock","src":"12899:39:60","statements":[{"nativeSrc":"12913:15:60","nodeType":"YulAssignment","src":"12913:15:60","value":{"name":"store","nativeSrc":"12923:5:60","nodeType":"YulIdentifier","src":"12923:5:60"},"variableNames":[{"name":"result","nativeSrc":"12913:6:60","nodeType":"YulIdentifier","src":"12913:6:60"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":12632,"isOffset":false,"isSlot":false,"src":"12913:6:60","valueSize":1},{"declaration":12622,"isOffset":false,"isSlot":false,"src":"12923:5:60","valueSize":1}],"id":12634,"nodeType":"InlineAssembly","src":"12890:48:60"},{"expression":{"id":12635,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12632,"src":"12955:6:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":12617,"id":12636,"nodeType":"Return","src":"12948:13:60"}]},"documentation":{"id":12609,"nodeType":"StructuredDocumentation","src":"12137:529:60","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":12638,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"12680:6:60","nodeType":"FunctionDefinition","parameters":{"id":12613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12612,"mutability":"mutable","name":"set","nameLocation":"12703:3:60","nodeType":"VariableDeclaration","scope":12638,"src":"12687:19:60","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":12611,"nodeType":"UserDefinedTypeName","pathNode":{"id":12610,"name":"UintSet","nameLocations":["12687:7:60"],"nodeType":"IdentifierPath","referencedDeclaration":12509,"src":"12687:7:60"},"referencedDeclaration":12509,"src":"12687:7:60","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$12509_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"12686:21:60"},"returnParameters":{"id":12617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12616,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12638,"src":"12731:16:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12614,"name":"uint256","nodeType":"ElementaryTypeName","src":"12731:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12615,"nodeType":"ArrayTypeName","src":"12731:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12730:18:60"},"scope":12639,"src":"12671:297:60","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":12640,"src":"1330:11640:60","usedErrors":[],"usedEvents":[]}],"src":"205:12766:60"},"id":60},"contracts/BalancerContractRegistry.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistry.sol","exportedSymbols":{"BalancerContractRegistry":[13200],"ContractType":[110],"IBalancerContractRegistry":[279],"IVault":[2319],"SingletonAuthentication":[8623]},"id":13201,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":12641,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:61"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":12644,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13201,"sourceUnit":280,"src":"72:152:61","symbolAliases":[{"foreign":{"id":12642,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":279,"src":"85:25:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":12643,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"116:12:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":12646,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13201,"sourceUnit":2320,"src":"225:81:61","symbolAliases":[{"foreign":{"id":12645,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"234:6:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":12648,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13201,"sourceUnit":8624,"src":"308:104:61","symbolAliases":[{"foreign":{"id":12647,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"317:23:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":12650,"name":"IBalancerContractRegistry","nameLocations":["2778:25:61"],"nodeType":"IdentifierPath","referencedDeclaration":279,"src":"2778:25:61"},"id":12651,"nodeType":"InheritanceSpecifier","src":"2778:25:61"},{"baseName":{"id":12652,"name":"SingletonAuthentication","nameLocations":["2805:23:61"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"2805:23:61"},"id":12653,"nodeType":"InheritanceSpecifier","src":"2805:23:61"}],"canonicalName":"BalancerContractRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":12649,"nodeType":"StructuredDocumentation","src":"414:2326:61","text":" @notice On-chain registry of standard Balancer contracts.\n @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n true for fully-compliant tokens with properly initialized buffers.\n Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n and query this contract to determine whether the Router is a \"trusted\" one.\n The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n contract for the Vault address, so it doesn't need to be a type."},"fullyImplemented":true,"id":13200,"linearizedBaseContracts":[13200,8623,6869,4159,81,279],"name":"BalancerContractRegistry","nameLocation":"2750:24:61","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":12657,"mutability":"mutable","name":"_contractRegistry","nameLocation":"3006:17:61","nodeType":"VariableDeclaration","scope":13200,"src":"2954:69:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":12656,"keyName":"contractId","keyNameLocation":"2970:10:61","keyType":{"id":12654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2962:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2954:43:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"2992:4:61","valueType":{"id":12655,"name":"address","nodeType":"ElementaryTypeName","src":"2984:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":12662,"mutability":"mutable","name":"_contractInfo","nameLocation":"3891:13:61","nodeType":"VariableDeclaration","scope":13200,"src":"3840:64:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"typeName":{"id":12661,"keyName":"addr","keyNameLocation":"3856:4:61","keyType":{"id":12658,"name":"address","nodeType":"ElementaryTypeName","src":"3848:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3840:42:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"valueName":"info","valueNameLocation":"3877:4:61","valueType":{"id":12660,"nodeType":"UserDefinedTypeName","pathNode":{"id":12659,"name":"ContractInfo","nameLocations":["3864:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"3864:12:61"},"referencedDeclaration":119,"src":"3864:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}}},"visibility":"private"},{"constant":false,"id":12666,"mutability":"mutable","name":"_contractAliases","nameLocation":"4259:16:61","nodeType":"VariableDeclaration","scope":13200,"src":"4202:73:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":12665,"keyName":"contractAliasId","keyNameLocation":"4218:15:61","keyType":{"id":12663,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4210:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4202:48:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"4245:4:61","valueType":{"id":12664,"name":"address","nodeType":"ElementaryTypeName","src":"4237:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"documentation":{"id":12667,"nodeType":"StructuredDocumentation","src":"4282:306:61","text":" @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n @dev This should never happen.\n @param contractName The name of the contract that has a registry entry but no contract info\n @param contractAddress The address of the contract with missing state"},"errorSelector":"36a7ac0a","id":12673,"name":"InconsistentState","nameLocation":"4599:17:61","nodeType":"ErrorDefinition","parameters":{"id":12672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12669,"mutability":"mutable","name":"contractName","nameLocation":"4624:12:61","nodeType":"VariableDeclaration","scope":12673,"src":"4617:19:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12668,"name":"string","nodeType":"ElementaryTypeName","src":"4617:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":12671,"mutability":"mutable","name":"contractAddress","nameLocation":"4646:15:61","nodeType":"VariableDeclaration","scope":12673,"src":"4638:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12670,"name":"address","nodeType":"ElementaryTypeName","src":"4638:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4616:46:61"},"src":"4593:70:61"},{"body":{"id":12682,"nodeType":"Block","src":"4726:64:61","statements":[]},"id":12683,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":12679,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12676,"src":"4719:5:61","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":12680,"kind":"baseConstructorSpecifier","modifierName":{"id":12678,"name":"SingletonAuthentication","nameLocations":["4695:23:61"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"4695:23:61"},"nodeType":"ModifierInvocation","src":"4695:30:61"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12676,"mutability":"mutable","name":"vault","nameLocation":"4688:5:61","nodeType":"VariableDeclaration","scope":12683,"src":"4681:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":12675,"nodeType":"UserDefinedTypeName","pathNode":{"id":12674,"name":"IVault","nameLocations":["4681:6:61"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"4681:6:61"},"referencedDeclaration":2319,"src":"4681:6:61","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4680:14:61"},"returnParameters":{"id":12681,"nodeType":"ParameterList","parameters":[],"src":"4726:0:61"},"scope":13200,"src":"4669:121:61","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[217],"body":{"id":12809,"nodeType":"Block","src":"7250:1696:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12696,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12691,"src":"7303:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7330:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7322:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12697,"name":"address","nodeType":"ElementaryTypeName","src":"7322:7:61","typeDescriptions":{}}},"id":12700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7322:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7303:29:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12706,"nodeType":"IfStatement","src":"7299:88:61","trueBody":{"id":12705,"nodeType":"Block","src":"7334:53:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12702,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"7355:19:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7355:21:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12704,"nodeType":"RevertStatement","src":"7348:28:61"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":12709,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12689,"src":"7407:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7401:5:61","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":12707,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:61","typeDescriptions":{}}},"id":12710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7401:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":12711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7421:6:61","memberName":"length","nodeType":"MemberAccess","src":"7401:26:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7431:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7401:31:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12718,"nodeType":"IfStatement","src":"7397:90:61","trueBody":{"id":12717,"nodeType":"Block","src":"7434:53:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12714,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"7455:19:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7455:21:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12716,"nodeType":"RevertStatement","src":"7448:28:61"}]}},{"assignments":[12721],"declarations":[{"constant":false,"id":12721,"mutability":"mutable","name":"info","nameLocation":"7565:4:61","nodeType":"VariableDeclaration","scope":12809,"src":"7545:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":12720,"nodeType":"UserDefinedTypeName","pathNode":{"id":12719,"name":"ContractInfo","nameLocations":["7545:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"7545:12:61"},"referencedDeclaration":119,"src":"7545:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":12725,"initialValue":{"baseExpression":{"id":12722,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"7572:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12724,"indexExpression":{"id":12723,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12691,"src":"7586:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7572:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7545:57:61"},{"condition":{"expression":{"id":12726,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12721,"src":"7616:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7621:12:61","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":116,"src":"7616:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12735,"nodeType":"IfStatement","src":"7612:123:61","trueBody":{"id":12734,"nodeType":"Block","src":"7635:100:61","statements":[{"errorCall":{"arguments":[{"expression":{"id":12729,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12721,"src":"7689:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7694:12:61","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":114,"src":"7689:17:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":12731,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12691,"src":"7708:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":12728,"name":"ContractAddressAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":159,"src":"7656:32:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$110_$_t_address_$returns$_t_error_$","typeString":"function (enum ContractType,address) pure returns (error)"}},"id":12732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7656:68:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12733,"nodeType":"RevertStatement","src":"7649:75:61"}]}},{"assignments":[12737],"declarations":[{"constant":false,"id":12737,"mutability":"mutable","name":"contractId","nameLocation":"7828:10:61","nodeType":"VariableDeclaration","scope":12809,"src":"7820:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12736,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7820:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12741,"initialValue":{"arguments":[{"id":12739,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12689,"src":"7856:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12738,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"7841:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":12740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7820:49:61"},{"assignments":[12743],"declarations":[{"constant":false,"id":12743,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"7887:23:61","nodeType":"VariableDeclaration","scope":12809,"src":"7879:31:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12742,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12747,"initialValue":{"baseExpression":{"id":12744,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12657,"src":"7913:17:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":12746,"indexExpression":{"id":12745,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12737,"src":"7931:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7913:29:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7879:63:61"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12748,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12743,"src":"7956:23:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":12751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7991:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7983:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12749,"name":"address","nodeType":"ElementaryTypeName","src":"7983:7:61","typeDescriptions":{}}},"id":12752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7983:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7956:37:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12767,"nodeType":"IfStatement","src":"7952:197:61","trueBody":{"id":12766,"nodeType":"Block","src":"7995:154:61","statements":[{"expression":{"id":12758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12754,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12721,"src":"8009:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":12755,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"8016:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12757,"indexExpression":{"id":12756,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12743,"src":"8030:23:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8016:38:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"8009:45:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12759,"nodeType":"ExpressionStatement","src":"8009:45:61"},{"errorCall":{"arguments":[{"expression":{"id":12761,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12721,"src":"8106:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8111:12:61","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":114,"src":"8106:17:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":12763,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12689,"src":"8125:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12760,"name":"ContractNameAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":167,"src":"8076:29:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$110_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":12764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8076:62:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12765,"nodeType":"RevertStatement","src":"8069:69:61"}]}},{"assignments":[12769],"declarations":[{"constant":false,"id":12769,"mutability":"mutable","name":"existingAliasAddress","nameLocation":"8222:20:61","nodeType":"VariableDeclaration","scope":12809,"src":"8214:28:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12768,"name":"address","nodeType":"ElementaryTypeName","src":"8214:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12773,"initialValue":{"baseExpression":{"id":12770,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"8245:16:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":12772,"indexExpression":{"id":12771,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12737,"src":"8262:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8245:28:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8214:59:61"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12774,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12769,"src":"8287:20:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":12777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8319:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8311:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12775,"name":"address","nodeType":"ElementaryTypeName","src":"8311:7:61","typeDescriptions":{}}},"id":12778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8311:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8287:34:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12786,"nodeType":"IfStatement","src":"8283:132:61","trueBody":{"id":12785,"nodeType":"Block","src":"8323:92:61","statements":[{"errorCall":{"arguments":[{"id":12781,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12689,"src":"8369:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12782,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12769,"src":"8383:20:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":12780,"name":"ContractNameInUseAsAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":174,"src":"8344:24:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":12783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8344:60:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12784,"nodeType":"RevertStatement","src":"8337:67:61"}]}},{"expression":{"id":12791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12787,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12657,"src":"8494:17:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":12789,"indexExpression":{"id":12788,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12737,"src":"8512:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8494:29:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12790,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12691,"src":"8526:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8494:47:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12792,"nodeType":"ExpressionStatement","src":"8494:47:61"},{"expression":{"id":12801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12793,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"8695:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12795,"indexExpression":{"id":12794,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12691,"src":"8709:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8695:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12797,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12687,"src":"8769:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"hexValue":"74727565","id":12798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8809:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":12799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8837:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":12796,"name":"ContractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119,"src":"8728:12:61","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ContractInfo_$119_storage_ptr_$","typeString":"type(struct IBalancerContractRegistry.ContractInfo storage pointer)"}},"id":12800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8755:12:61","8795:12:61","8827:8:61"],"names":["contractType","isRegistered","isActive"],"nodeType":"FunctionCall","src":"8728:124:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"8695:157:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":12802,"nodeType":"ExpressionStatement","src":"8695:157:61"},{"eventCall":{"arguments":[{"id":12804,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12687,"src":"8895:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":12805,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12689,"src":"8909:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12806,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12691,"src":"8923:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":12803,"name":"BalancerContractRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"8868:26:61","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$110_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":12807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8868:71:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12808,"nodeType":"EmitStatement","src":"8863:76:61"}]},"documentation":{"id":12684,"nodeType":"StructuredDocumentation","src":"7038:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"e0376ab4","id":12810,"implemented":true,"kind":"function","modifiers":[{"id":12694,"kind":"modifierInvocation","modifierName":{"id":12693,"name":"authenticate","nameLocations":["7237:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"7237:12:61"},"nodeType":"ModifierInvocation","src":"7237:12:61"}],"name":"registerBalancerContract","nameLocation":"7093:24:61","nodeType":"FunctionDefinition","parameters":{"id":12692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12687,"mutability":"mutable","name":"contractType","nameLocation":"7140:12:61","nodeType":"VariableDeclaration","scope":12810,"src":"7127:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":12686,"nodeType":"UserDefinedTypeName","pathNode":{"id":12685,"name":"ContractType","nameLocations":["7127:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"7127:12:61"},"referencedDeclaration":110,"src":"7127:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":12689,"mutability":"mutable","name":"contractName","nameLocation":"7176:12:61","nodeType":"VariableDeclaration","scope":12810,"src":"7162:26:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12688,"name":"string","nodeType":"ElementaryTypeName","src":"7162:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":12691,"mutability":"mutable","name":"contractAddress","nameLocation":"7206:15:61","nodeType":"VariableDeclaration","scope":12810,"src":"7198:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12690,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7117:110:61"},"returnParameters":{"id":12695,"nodeType":"ParameterList","parameters":[],"src":"7250:0:61"},"scope":13200,"src":"7084:1862:61","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[223],"body":{"id":12889,"nodeType":"Block","src":"9084:851:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":12820,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12813,"src":"9104:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9098:5:61","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":12818,"name":"bytes","nodeType":"ElementaryTypeName","src":"9098:5:61","typeDescriptions":{}}},"id":12821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9098:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":12822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9118:6:61","memberName":"length","nodeType":"MemberAccess","src":"9098:26:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9128:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9098:31:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12829,"nodeType":"IfStatement","src":"9094:90:61","trueBody":{"id":12828,"nodeType":"Block","src":"9131:53:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12825,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"9152:19:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9152:21:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12827,"nodeType":"RevertStatement","src":"9145:28:61"}]}},{"assignments":[12831],"declarations":[{"constant":false,"id":12831,"mutability":"mutable","name":"contractId","nameLocation":"9243:10:61","nodeType":"VariableDeclaration","scope":12889,"src":"9235:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12830,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9235:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12835,"initialValue":{"arguments":[{"id":12833,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12813,"src":"9271:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12832,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"9256:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":12834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9256:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9235:49:61"},{"assignments":[12837],"declarations":[{"constant":false,"id":12837,"mutability":"mutable","name":"contractAddress","nameLocation":"9302:15:61","nodeType":"VariableDeclaration","scope":12889,"src":"9294:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12836,"name":"address","nodeType":"ElementaryTypeName","src":"9294:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12841,"initialValue":{"baseExpression":{"id":12838,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12657,"src":"9320:17:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":12840,"indexExpression":{"id":12839,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12831,"src":"9338:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9320:29:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9294:55:61"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12842,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12837,"src":"9364:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9383:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12843,"name":"address","nodeType":"ElementaryTypeName","src":"9383:7:61","typeDescriptions":{}}},"id":12846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9383:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9364:29:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12853,"nodeType":"IfStatement","src":"9360:106:61","trueBody":{"id":12852,"nodeType":"Block","src":"9395:71:61","statements":[{"errorCall":{"arguments":[{"id":12849,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12813,"src":"9442:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12848,"name":"ContractNameNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":187,"src":"9416:25:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":12850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9416:39:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12851,"nodeType":"RevertStatement","src":"9409:46:61"}]}},{"assignments":[12856],"declarations":[{"constant":false,"id":12856,"mutability":"mutable","name":"info","nameLocation":"9496:4:61","nodeType":"VariableDeclaration","scope":12889,"src":"9476:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":12855,"nodeType":"UserDefinedTypeName","pathNode":{"id":12854,"name":"ContractInfo","nameLocations":["9476:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"9476:12:61"},"referencedDeclaration":119,"src":"9476:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":12860,"initialValue":{"baseExpression":{"id":12857,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"9503:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12859,"indexExpression":{"id":12858,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12837,"src":"9517:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9503:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9476:57:61"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12861,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12856,"src":"9633:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9638:12:61","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":116,"src":"9633:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":12863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9654:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9633:26:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12871,"nodeType":"IfStatement","src":"9629:112:61","trueBody":{"id":12870,"nodeType":"Block","src":"9661:80:61","statements":[{"errorCall":{"arguments":[{"id":12866,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12813,"src":"9700:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12867,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12837,"src":"9714:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":12865,"name":"InconsistentState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12673,"src":"9682:17:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":12868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:48:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12869,"nodeType":"RevertStatement","src":"9675:55:61"}]}},{"expression":{"id":12875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9751:36:61","subExpression":{"baseExpression":{"id":12872,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12657,"src":"9758:17:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":12874,"indexExpression":{"id":12873,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12831,"src":"9776:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9758:29:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12876,"nodeType":"ExpressionStatement","src":"9751:36:61"},{"expression":{"id":12880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9797:37:61","subExpression":{"baseExpression":{"id":12877,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"9804:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12879,"indexExpression":{"id":12878,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12837,"src":"9818:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9804:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12881,"nodeType":"ExpressionStatement","src":"9797:37:61"},{"eventCall":{"arguments":[{"expression":{"id":12883,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12856,"src":"9879:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9884:12:61","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":114,"src":"9879:17:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":12885,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12813,"src":"9898:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":12886,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12837,"src":"9912:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":12882,"name":"BalancerContractDeregistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":139,"src":"9850:28:61","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$110_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":12887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9850:78:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12888,"nodeType":"EmitStatement","src":"9845:83:61"}]},"documentation":{"id":12811,"nodeType":"StructuredDocumentation","src":"8952:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"c7f90793","id":12890,"implemented":true,"kind":"function","modifiers":[{"id":12816,"kind":"modifierInvocation","modifierName":{"id":12815,"name":"authenticate","nameLocations":["9071:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"9071:12:61"},"nodeType":"ModifierInvocation","src":"9071:12:61"}],"name":"deregisterBalancerContract","nameLocation":"9007:26:61","nodeType":"FunctionDefinition","parameters":{"id":12814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12813,"mutability":"mutable","name":"contractName","nameLocation":"9048:12:61","nodeType":"VariableDeclaration","scope":12890,"src":"9034:26:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12812,"name":"string","nodeType":"ElementaryTypeName","src":"9034:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9033:28:61"},"returnParameters":{"id":12817,"nodeType":"ParameterList","parameters":[],"src":"9084:0:61"},"scope":13200,"src":"8998:937:61","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[229],"body":{"id":12952,"nodeType":"Block","src":"10069:949:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12898,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"10083:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10110:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12900,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10102:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12899,"name":"address","nodeType":"ElementaryTypeName","src":"10102:7:61","typeDescriptions":{}}},"id":12902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10102:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10083:29:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12908,"nodeType":"IfStatement","src":"10079:88:61","trueBody":{"id":12907,"nodeType":"Block","src":"10114:53:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12904,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"10135:19:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10135:21:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12906,"nodeType":"RevertStatement","src":"10128:28:61"}]}},{"assignments":[12911],"declarations":[{"constant":false,"id":12911,"mutability":"mutable","name":"info","nameLocation":"10197:4:61","nodeType":"VariableDeclaration","scope":12952,"src":"10177:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":12910,"nodeType":"UserDefinedTypeName","pathNode":{"id":12909,"name":"ContractInfo","nameLocations":["10177:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"10177:12:61"},"referencedDeclaration":119,"src":"10177:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":12915,"initialValue":{"baseExpression":{"id":12912,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"10204:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12914,"indexExpression":{"id":12913,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"10218:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10204:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10177:57:61"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12916,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12911,"src":"10304:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10309:12:61","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":116,"src":"10304:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":12918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10325:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10304:26:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12925,"nodeType":"IfStatement","src":"10300:109:61","trueBody":{"id":12924,"nodeType":"Block","src":"10332:77:61","statements":[{"errorCall":{"arguments":[{"id":12921,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"10382:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12920,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"10353:28:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":12922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:45:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12923,"nodeType":"RevertStatement","src":"10346:52:61"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12926,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12911,"src":"10503:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10508:8:61","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":118,"src":"10503:13:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":12928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10520:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10503:22:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12935,"nodeType":"IfStatement","src":"10499:102:61","trueBody":{"id":12934,"nodeType":"Block","src":"10527:74:61","statements":[{"errorCall":{"arguments":[{"id":12931,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"10574:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12930,"name":"ContractAlreadyDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":197,"src":"10548:25:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":12932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10548:42:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12933,"nodeType":"RevertStatement","src":"10541:49:61"}]}},{"expression":{"id":12940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12936,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12911,"src":"10884:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10889:8:61","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":118,"src":"10884:13:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":12939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10900:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10884:21:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12941,"nodeType":"ExpressionStatement","src":"10884:21:61"},{"expression":{"id":12946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12942,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"10915:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12944,"indexExpression":{"id":12943,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"10929:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10915:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12945,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12911,"src":"10948:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"10915:37:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":12947,"nodeType":"ExpressionStatement","src":"10915:37:61"},{"eventCall":{"arguments":[{"id":12949,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"10995:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12948,"name":"BalancerContractDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":144,"src":"10968:26:61","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":12950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10968:43:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12951,"nodeType":"EmitStatement","src":"10963:48:61"}]},"documentation":{"id":12891,"nodeType":"StructuredDocumentation","src":"9941:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"44969a9c","id":12953,"implemented":true,"kind":"function","modifiers":[{"id":12896,"kind":"modifierInvocation","modifierName":{"id":12895,"name":"authenticate","nameLocations":["10056:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"10056:12:61"},"nodeType":"ModifierInvocation","src":"10056:12:61"}],"name":"deprecateBalancerContract","nameLocation":"9996:25:61","nodeType":"FunctionDefinition","parameters":{"id":12894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12893,"mutability":"mutable","name":"contractAddress","nameLocation":"10030:15:61","nodeType":"VariableDeclaration","scope":12953,"src":"10022:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12892,"name":"address","nodeType":"ElementaryTypeName","src":"10022:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10021:25:61"},"returnParameters":{"id":12897,"nodeType":"ParameterList","parameters":[],"src":"10069:0:61"},"scope":13200,"src":"9987:1031:61","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[237],"body":{"id":13046,"nodeType":"Block","src":"11210:1370:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":12965,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12956,"src":"11269:13:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11263:5:61","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":12963,"name":"bytes","nodeType":"ElementaryTypeName","src":"11263:5:61","typeDescriptions":{}}},"id":12966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11263:20:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":12967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11284:6:61","memberName":"length","nodeType":"MemberAccess","src":"11263:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11294:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11263:32:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12974,"nodeType":"IfStatement","src":"11259:92:61","trueBody":{"id":12973,"nodeType":"Block","src":"11297:54:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12970,"name":"InvalidContractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"11318:20:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11318:22:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12972,"nodeType":"RevertStatement","src":"11311:29:61"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12975,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"11365:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":12978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11392:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":12977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11384:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12976,"name":"address","nodeType":"ElementaryTypeName","src":"11384:7:61","typeDescriptions":{}}},"id":12979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11384:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11365:29:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12985,"nodeType":"IfStatement","src":"11361:88:61","trueBody":{"id":12984,"nodeType":"Block","src":"11396:53:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12981,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"11417:19:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11417:21:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12983,"nodeType":"RevertStatement","src":"11410:28:61"}]}},{"assignments":[12988],"declarations":[{"constant":false,"id":12988,"mutability":"mutable","name":"info","nameLocation":"11533:4:61","nodeType":"VariableDeclaration","scope":13046,"src":"11513:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":12987,"nodeType":"UserDefinedTypeName","pathNode":{"id":12986,"name":"ContractInfo","nameLocations":["11513:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"11513:12:61"},"referencedDeclaration":119,"src":"11513:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":12992,"initialValue":{"baseExpression":{"id":12989,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"11540:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":12991,"indexExpression":{"id":12990,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"11554:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11540:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11513:57:61"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12993,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12988,"src":"11584:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":12994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11589:12:61","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":116,"src":"11584:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":12995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11605:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"11584:26:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13002,"nodeType":"IfStatement","src":"11580:109:61","trueBody":{"id":13001,"nodeType":"Block","src":"11612:77:61","statements":[{"errorCall":{"arguments":[{"id":12998,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"11662:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12997,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":192,"src":"11633:28:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":12999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11633:45:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13000,"nodeType":"RevertStatement","src":"11626:52:61"}]}},{"assignments":[13004],"declarations":[{"constant":false,"id":13004,"mutability":"mutable","name":"contractId","nameLocation":"12061:10:61","nodeType":"VariableDeclaration","scope":13046,"src":"12053:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13003,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12053:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":13008,"initialValue":{"arguments":[{"id":13006,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12956,"src":"12089:13:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13005,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"12074:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12074:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12053:50:61"},{"assignments":[13010],"declarations":[{"constant":false,"id":13010,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"12121:23:61","nodeType":"VariableDeclaration","scope":13046,"src":"12113:31:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13009,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":13014,"initialValue":{"baseExpression":{"id":13011,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12657,"src":"12147:17:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":13013,"indexExpression":{"id":13012,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13004,"src":"12165:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12147:29:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12113:63:61"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13015,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13010,"src":"12190:23:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":13018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12225:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12217:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13016,"name":"address","nodeType":"ElementaryTypeName","src":"12217:7:61","typeDescriptions":{}}},"id":13019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12217:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12190:37:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13034,"nodeType":"IfStatement","src":"12186:193:61","trueBody":{"id":13033,"nodeType":"Block","src":"12229:150:61","statements":[{"expression":{"id":13025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13021,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12988,"src":"12243:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":13022,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"12250:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":13024,"indexExpression":{"id":13023,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13010,"src":"12264:23:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12250:38:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"12243:45:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13026,"nodeType":"ExpressionStatement","src":"12243:45:61"},{"errorCall":{"arguments":[{"expression":{"id":13028,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12988,"src":"12335:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12340:12:61","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":114,"src":"12335:17:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":13030,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12956,"src":"12354:13:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13027,"name":"ContractAliasInUseAsName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":182,"src":"12310:24:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$110_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":13031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12310:58:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13032,"nodeType":"RevertStatement","src":"12303:65:61"}]}},{"expression":{"id":13039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13035,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"12459:16:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":13037,"indexExpression":{"id":13036,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13004,"src":"12476:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12459:28:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13038,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"12490:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12459:46:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13040,"nodeType":"ExpressionStatement","src":"12459:46:61"},{"eventCall":{"arguments":[{"id":13042,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12956,"src":"12542:13:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":13043,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12958,"src":"12557:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13041,"name":"ContractAliasUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":151,"src":"12521:20:61","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address)"}},"id":13044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12521:52:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13045,"nodeType":"EmitStatement","src":"12516:57:61"}]},"documentation":{"id":12954,"nodeType":"StructuredDocumentation","src":"11024:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"2967af96","id":13047,"implemented":true,"kind":"function","modifiers":[{"id":12961,"kind":"modifierInvocation","modifierName":{"id":12960,"name":"authenticate","nameLocations":["11197:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"11197:12:61"},"nodeType":"ModifierInvocation","src":"11197:12:61"}],"name":"addOrUpdateBalancerContractAlias","nameLocation":"11079:32:61","nodeType":"FunctionDefinition","parameters":{"id":12959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12956,"mutability":"mutable","name":"contractAlias","nameLocation":"11135:13:61","nodeType":"VariableDeclaration","scope":13047,"src":"11121:27:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12955,"name":"string","nodeType":"ElementaryTypeName","src":"11121:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":12958,"mutability":"mutable","name":"contractAddress","nameLocation":"11166:15:61","nodeType":"VariableDeclaration","scope":13047,"src":"11158:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12957,"name":"address","nodeType":"ElementaryTypeName","src":"11158:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11111:76:61"},"returnParameters":{"id":12962,"nodeType":"ParameterList","parameters":[],"src":"11210:0:61"},"scope":13200,"src":"11070:1510:61","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[248],"body":{"id":13063,"nodeType":"Block","src":"12747:80:61","statements":[{"expression":{"arguments":[{"id":13059,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13051,"src":"12790:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":13060,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13053,"src":"12804:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13058,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"12764:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$110_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":13061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12764:56:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13057,"id":13062,"nodeType":"Return","src":"12757:63:61"}]},"documentation":{"id":13048,"nodeType":"StructuredDocumentation","src":"12586:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"ae2733a4","id":13064,"implemented":true,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"12641:24:61","nodeType":"FunctionDefinition","parameters":{"id":13054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13051,"mutability":"mutable","name":"contractType","nameLocation":"12679:12:61","nodeType":"VariableDeclaration","scope":13064,"src":"12666:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":13050,"nodeType":"UserDefinedTypeName","pathNode":{"id":13049,"name":"ContractType","nameLocations":["12666:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"12666:12:61"},"referencedDeclaration":110,"src":"12666:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":13053,"mutability":"mutable","name":"contractAddress","nameLocation":"12701:15:61","nodeType":"VariableDeclaration","scope":13064,"src":"12693:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13052,"name":"address","nodeType":"ElementaryTypeName","src":"12693:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12665:52:61"},"returnParameters":{"id":13057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13056,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13064,"src":"12741:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13055,"name":"bool","nodeType":"ElementaryTypeName","src":"12741:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12740:6:61"},"scope":13200,"src":"12632:195:61","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":13089,"nodeType":"Block","src":"12971:235:61","statements":[{"assignments":[13076],"declarations":[{"constant":false,"id":13076,"mutability":"mutable","name":"info","nameLocation":"13001:4:61","nodeType":"VariableDeclaration","scope":13089,"src":"12981:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":13075,"nodeType":"UserDefinedTypeName","pathNode":{"id":13074,"name":"ContractInfo","nameLocations":["12981:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"12981:12:61"},"referencedDeclaration":119,"src":"12981:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":13080,"initialValue":{"baseExpression":{"id":13077,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"13008:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":13079,"indexExpression":{"id":13078,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13069,"src":"13022:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13008:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12981:57:61"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13081,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13076,"src":"13149:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13154:8:61","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":118,"src":"13149:13:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"id":13086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13083,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13076,"src":"13166:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13171:12:61","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":114,"src":"13166:17:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":13085,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13067,"src":"13187:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"src":"13166:33:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13149:50:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13073,"id":13088,"nodeType":"Return","src":"13142:57:61"}]},"id":13090,"implemented":true,"kind":"function","modifiers":[],"name":"_isActiveBalancerContract","nameLocation":"12842:25:61","nodeType":"FunctionDefinition","parameters":{"id":13070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13067,"mutability":"mutable","name":"contractType","nameLocation":"12890:12:61","nodeType":"VariableDeclaration","scope":13090,"src":"12877:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":13066,"nodeType":"UserDefinedTypeName","pathNode":{"id":13065,"name":"ContractType","nameLocations":["12877:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"12877:12:61"},"referencedDeclaration":110,"src":"12877:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":13069,"mutability":"mutable","name":"contractAddress","nameLocation":"12920:15:61","nodeType":"VariableDeclaration","scope":13090,"src":"12912:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13068,"name":"address","nodeType":"ElementaryTypeName","src":"12912:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12867:74:61"},"returnParameters":{"id":13073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13090,"src":"12965:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13071,"name":"bool","nodeType":"ElementaryTypeName","src":"12965:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12964:6:61"},"scope":13200,"src":"12833:373:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[261],"body":{"id":13154,"nodeType":"Block","src":"13427:833:61","statements":[{"assignments":[13104],"declarations":[{"constant":false,"id":13104,"mutability":"mutable","name":"contractId","nameLocation":"13445:10:61","nodeType":"VariableDeclaration","scope":13154,"src":"13437:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13437:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":13108,"initialValue":{"arguments":[{"id":13106,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13096,"src":"13473:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13105,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"13458:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13458:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13437:49:61"},{"assignments":[13110],"declarations":[{"constant":false,"id":13110,"mutability":"mutable","name":"registeredAddress","nameLocation":"13504:17:61","nodeType":"VariableDeclaration","scope":13154,"src":"13496:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13109,"name":"address","nodeType":"ElementaryTypeName","src":"13496:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":13114,"initialValue":{"baseExpression":{"id":13111,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12657,"src":"13524:17:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":13113,"indexExpression":{"id":13112,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"13542:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13524:29:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13496:57:61"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13115,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"13641:17:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":13118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13670:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13662:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13116,"name":"address","nodeType":"ElementaryTypeName","src":"13662:7:61","typeDescriptions":{}}},"id":13119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13662:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13641:31:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13128,"nodeType":"IfStatement","src":"13637:110:61","trueBody":{"id":13127,"nodeType":"Block","src":"13674:73:61","statements":[{"expression":{"id":13125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13121,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"13688:17:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":13122,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12666,"src":"13708:16:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":13124,"indexExpression":{"id":13123,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"13725:10:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13708:28:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13688:48:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13126,"nodeType":"ExpressionStatement","src":"13688:48:61"}]}},{"assignments":[13131],"declarations":[{"constant":false,"id":13131,"mutability":"mutable","name":"info","nameLocation":"13777:4:61","nodeType":"VariableDeclaration","scope":13154,"src":"13757:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":13130,"nodeType":"UserDefinedTypeName","pathNode":{"id":13129,"name":"ContractInfo","nameLocations":["13757:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"13757:12:61"},"referencedDeclaration":119,"src":"13757:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":13135,"initialValue":{"baseExpression":{"id":13132,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"13784:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":13134,"indexExpression":{"id":13133,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"13798:17:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13784:32:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13757:59:61"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13136,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13131,"src":"14100:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14105:12:61","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":116,"src":"14100:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"id":13141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13138,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13131,"src":"14121:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14126:12:61","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":114,"src":"14121:17:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":13140,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"14142:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"src":"14121:33:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14100:54:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13153,"nodeType":"IfStatement","src":"14096:158:61","trueBody":{"id":13152,"nodeType":"Block","src":"14156:98:61","statements":[{"expression":{"id":13145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13143,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13099,"src":"14170:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13144,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"14188:17:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14170:35:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13146,"nodeType":"ExpressionStatement","src":"14170:35:61"},{"expression":{"id":13150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13147,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13101,"src":"14219:8:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13148,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13131,"src":"14230:4:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":13149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14235:8:61","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":118,"src":"14230:13:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14219:24:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13151,"nodeType":"ExpressionStatement","src":"14219:24:61"}]}}]},"documentation":{"id":13091,"nodeType":"StructuredDocumentation","src":"13212:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"41d8c0bb","id":13155,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"13267:19:61","nodeType":"FunctionDefinition","parameters":{"id":13097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13094,"mutability":"mutable","name":"contractType","nameLocation":"13309:12:61","nodeType":"VariableDeclaration","scope":13155,"src":"13296:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},"typeName":{"id":13093,"nodeType":"UserDefinedTypeName","pathNode":{"id":13092,"name":"ContractType","nameLocations":["13296:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":110,"src":"13296:12:61"},"referencedDeclaration":110,"src":"13296:12:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":13096,"mutability":"mutable","name":"contractName","nameLocation":"13345:12:61","nodeType":"VariableDeclaration","scope":13155,"src":"13331:26:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":13095,"name":"string","nodeType":"ElementaryTypeName","src":"13331:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13286:77:61"},"returnParameters":{"id":13102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13099,"mutability":"mutable","name":"contractAddress","nameLocation":"13395:15:61","nodeType":"VariableDeclaration","scope":13155,"src":"13387:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13098,"name":"address","nodeType":"ElementaryTypeName","src":"13387:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13101,"mutability":"mutable","name":"isActive","nameLocation":"13417:8:61","nodeType":"VariableDeclaration","scope":13155,"src":"13412:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13100,"name":"bool","nodeType":"ElementaryTypeName","src":"13412:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13386:40:61"},"scope":13200,"src":"13258:1002:61","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[270],"body":{"id":13168,"nodeType":"Block","src":"14419:54:61","statements":[{"expression":{"baseExpression":{"id":13164,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12662,"src":"14436:13:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$119_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":13166,"indexExpression":{"id":13165,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13158,"src":"14450:15:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14436:30:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"functionReturnParameters":13163,"id":13167,"nodeType":"Return","src":"14429:37:61"}]},"documentation":{"id":13156,"nodeType":"StructuredDocumentation","src":"14266:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"8554c327","id":13169,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"14321:23:61","nodeType":"FunctionDefinition","parameters":{"id":13159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13158,"mutability":"mutable","name":"contractAddress","nameLocation":"14353:15:61","nodeType":"VariableDeclaration","scope":13169,"src":"14345:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13157,"name":"address","nodeType":"ElementaryTypeName","src":"14345:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14344:25:61"},"returnParameters":{"id":13163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13162,"mutability":"mutable","name":"info","nameLocation":"14413:4:61","nodeType":"VariableDeclaration","scope":13169,"src":"14393:24:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":13161,"nodeType":"UserDefinedTypeName","pathNode":{"id":13160,"name":"ContractInfo","nameLocations":["14393:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":119,"src":"14393:12:61"},"referencedDeclaration":119,"src":"14393:12:61","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$119_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"14392:26:61"},"scope":13200,"src":"14312:161:61","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[278],"body":{"id":13183,"nodeType":"Block","src":"14595:78:61","statements":[{"expression":{"arguments":[{"expression":{"id":13178,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"14638:12:61","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$110_$","typeString":"type(enum ContractType)"}},"id":13179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14651:6:61","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":107,"src":"14638:19:61","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":13180,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13172,"src":"14659:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13177,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"14612:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$110_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":13181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14612:54:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13176,"id":13182,"nodeType":"Return","src":"14605:61:61"}]},"documentation":{"id":13170,"nodeType":"StructuredDocumentation","src":"14479:41:61","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"264e97e0","id":13184,"implemented":true,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"14534:15:61","nodeType":"FunctionDefinition","parameters":{"id":13173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13172,"mutability":"mutable","name":"router","nameLocation":"14558:6:61","nodeType":"VariableDeclaration","scope":13184,"src":"14550:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13171,"name":"address","nodeType":"ElementaryTypeName","src":"14550:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14549:16:61"},"returnParameters":{"id":13176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13175,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13184,"src":"14589:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13174,"name":"bool","nodeType":"ElementaryTypeName","src":"14589:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14588:6:61"},"scope":13200,"src":"14525:148:61","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":13198,"nodeType":"Block","src":"14763:65:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":13194,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13186,"src":"14807:12:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":13192,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14790:3:61","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13193,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14794:12:61","memberName":"encodePacked","nodeType":"MemberAccess","src":"14790:16:61","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14790:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13191,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14780:9:61","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14780:41:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":13190,"id":13197,"nodeType":"Return","src":"14773:48:61"}]},"id":13199,"implemented":true,"kind":"function","modifiers":[],"name":"_getContractId","nameLocation":"14688:14:61","nodeType":"FunctionDefinition","parameters":{"id":13187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13186,"mutability":"mutable","name":"contractName","nameLocation":"14717:12:61","nodeType":"VariableDeclaration","scope":13199,"src":"14703:26:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":13185,"name":"string","nodeType":"ElementaryTypeName","src":"14703:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14702:28:61"},"returnParameters":{"id":13190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13199,"src":"14754:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13188,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14754:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14753:9:61"},"scope":13200,"src":"14679:149:61","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":13201,"src":"2741:12089:61","usedErrors":[72,159,167,174,182,187,192,197,200,203,206,6689,12673],"usedEvents":[129,139,144,151]}],"src":"46:14785:61"},"id":61},"contracts/CallAndRevert.sol":{"ast":{"absolutePath":"contracts/CallAndRevert.sol","exportedSymbols":{"Address":[10237],"CallAndRevert":[13306],"RevertCodec":[4582]},"id":13307,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":13202,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:62"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":13204,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13307,"sourceUnit":10238,"src":"72:68:62","symbolAliases":[{"foreign":{"id":13203,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10237,"src":"81:7:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":13206,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13307,"sourceUnit":4583,"src":"142:97:62","symbolAliases":[{"foreign":{"id":13205,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"151:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CallAndRevert","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":13306,"linearizedBaseContracts":[13306],"name":"CallAndRevert","nameLocation":"250:13:62","nodeType":"ContractDefinition","nodes":[{"errorSelector":"28f95541","id":13208,"name":"QuoteResultSpoofed","nameLocation":"276:18:62","nodeType":"ErrorDefinition","parameters":{"id":13207,"nodeType":"ParameterList","parameters":[],"src":"294:2:62"},"src":"270:27:62"},{"body":{"id":13244,"nodeType":"Block","src":"394:233:62","statements":[{"clauses":[{"block":{"id":13231,"nodeType":"Block","src":"469:53:62","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":13228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"490:20:62","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":13227,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"483:6:62","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":13229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"483:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13230,"nodeType":"ExpressionStatement","src":"483:28:62"}]},"errorName":"","id":13232,"nodeType":"TryCatchClause","src":"469:53:62"},{"block":{"id":13241,"nodeType":"Block","src":"551:70:62","statements":[{"expression":{"arguments":[{"id":13238,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13234,"src":"603:6:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13236,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"572:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":13237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"584:18:62","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":4544,"src":"572:30:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":13239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"572:38:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":13216,"id":13240,"nodeType":"Return","src":"565:45:62"}]},"errorName":"","id":13242,"nodeType":"TryCatchClause","parameters":{"id":13235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13234,"mutability":"mutable","name":"result","nameLocation":"543:6:62","nodeType":"VariableDeclaration","scope":13242,"src":"530:19:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13233,"name":"bytes","nodeType":"ElementaryTypeName","src":"530:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"529:21:62"},"src":"523:98:62"}],"externalCall":{"arguments":[{"id":13224,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13210,"src":"455:6:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13225,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13212,"src":"463:4:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"id":13220,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"430:4:62","typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$13306","typeString":"contract CallAndRevert"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CallAndRevert_$13306","typeString":"contract CallAndRevert"}],"id":13219,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"422:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13218,"name":"address","nodeType":"ElementaryTypeName","src":"422:7:62","typeDescriptions":{}}},"id":13221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"422:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13217,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13306,"src":"408:13:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CallAndRevert_$13306_$","typeString":"type(contract CallAndRevert)"}},"id":13222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$13306","typeString":"contract CallAndRevert"}},"id":13223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"437:17:62","memberName":"callAndRevertHook","nodeType":"MemberAccess","referencedDeclaration":13305,"src":"408:46:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) external"}},"id":13226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:60:62","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13243,"nodeType":"TryStatement","src":"404:217:62"}]},"id":13245,"implemented":true,"kind":"function","modifiers":[],"name":"_callAndRevert","nameLocation":"312:14:62","nodeType":"FunctionDefinition","parameters":{"id":13213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13210,"mutability":"mutable","name":"target","nameLocation":"335:6:62","nodeType":"VariableDeclaration","scope":13245,"src":"327:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13209,"name":"address","nodeType":"ElementaryTypeName","src":"327:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13212,"mutability":"mutable","name":"data","nameLocation":"356:4:62","nodeType":"VariableDeclaration","scope":13245,"src":"343:17:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13211,"name":"bytes","nodeType":"ElementaryTypeName","src":"343:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"326:35:62"},"returnParameters":{"id":13216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13245,"src":"380:12:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13214,"name":"bytes","nodeType":"ElementaryTypeName","src":"380:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"379:14:62"},"scope":13306,"src":"303:324:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":13304,"nodeType":"Block","src":"704:860:62","statements":[{"assignments":[13253,13255],"declarations":[{"constant":false,"id":13253,"mutability":"mutable","name":"success","nameLocation":"779:7:62","nodeType":"VariableDeclaration","scope":13304,"src":"774:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13252,"name":"bool","nodeType":"ElementaryTypeName","src":"774:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13255,"mutability":"mutable","name":"result","nameLocation":"801:6:62","nodeType":"VariableDeclaration","scope":13304,"src":"788:19:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13254,"name":"bytes","nodeType":"ElementaryTypeName","src":"788:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":13261,"initialValue":{"arguments":[{"id":13259,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13249,"src":"825:4:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"components":[{"id":13256,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13247,"src":"812:6:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13257,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"811:8:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"820:4:62","memberName":"call","nodeType":"MemberAccess","src":"811:13:62","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":13260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"811:19:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"773:57:62"},{"condition":{"id":13262,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"844:7:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13302,"nodeType":"Block","src":"1127:431:62","statements":[{"assignments":[13280],"declarations":[{"constant":false,"id":13280,"mutability":"mutable","name":"errorSelector","nameLocation":"1260:13:62","nodeType":"VariableDeclaration","scope":13302,"src":"1253:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":13279,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1253:6:62","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":13285,"initialValue":{"arguments":[{"id":13283,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"1302:6:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13281,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1276:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":13282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1288:13:62","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"1276:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":13284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1276:33:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1253:56:62"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":13290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13286,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13280,"src":"1327:13:62","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":13287,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1344:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":13288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1356:6:62","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4500,"src":"1344:18:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":13289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1363:8:62","memberName":"selector","nodeType":"MemberAccess","src":"1344:27:62","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1327:44:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13295,"nodeType":"IfStatement","src":"1323:110:62","trueBody":{"id":13294,"nodeType":"Block","src":"1373:60:62","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13291,"name":"QuoteResultSpoofed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13208,"src":"1398:18:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:20:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13293,"nodeType":"RevertStatement","src":"1391:27:62"}]}},{"expression":{"arguments":[{"id":13299,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"1540:6:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13296,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1513:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":13298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1525:14:62","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4581,"src":"1513:26:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":13300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:34:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13301,"nodeType":"ExpressionStatement","src":"1513:34:62"}]},"id":13303,"nodeType":"IfStatement","src":"840:718:62","trueBody":{"id":13278,"nodeType":"Block","src":"853:268:62","statements":[{"expression":{"arguments":[{"expression":{"id":13266,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"990:3:62","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"994:6:62","memberName":"sender","nodeType":"MemberAccess","src":"990:10:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13268,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13253,"src":"1002:7:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13269,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"1011:6:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13263,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10237,"src":"955:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$10237_$","typeString":"type(library Address)"}},"id":13265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"963:26:62","memberName":"verifyCallResultFromTarget","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"955:34:62","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":13270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:63:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13271,"nodeType":"ExpressionStatement","src":"955:63:62"},{"errorCall":{"arguments":[{"id":13275,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"1103:6:62","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13272,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1084:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4582_$","typeString":"type(library RevertCodec)"}},"id":13274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1096:6:62","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4500,"src":"1084:18:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":13276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13277,"nodeType":"RevertStatement","src":"1077:33:62"}]}}]},"functionSelector":"a7699638","id":13305,"implemented":true,"kind":"function","modifiers":[],"name":"callAndRevertHook","nameLocation":"642:17:62","nodeType":"FunctionDefinition","parameters":{"id":13250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13247,"mutability":"mutable","name":"target","nameLocation":"668:6:62","nodeType":"VariableDeclaration","scope":13305,"src":"660:14:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13246,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13249,"mutability":"mutable","name":"data","nameLocation":"689:4:62","nodeType":"VariableDeclaration","scope":13305,"src":"676:17:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13248,"name":"bytes","nodeType":"ElementaryTypeName","src":"676:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"659:35:62"},"returnParameters":{"id":13251,"nodeType":"ParameterList","parameters":[],"src":"704:0:62"},"scope":13306,"src":"633:931:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":13307,"src":"241:1325:62","usedErrors":[4500,4503,9997,10000,13208],"usedEvents":[]}],"src":"46:1521:62"},"id":62},"contracts/CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[14155],"GPv2Order":[360],"IComposableCow":[329],"ICowConditionalOrder":[421],"ICowConditionalOrderGenerator":[457],"ICowSwapFeeBurner":[569],"IERC1271":[8732],"IERC165":[10271],"IERC20":[9632],"IProtocolFeeBurner":[718],"IVault":[2319],"ReentrancyGuardTransient":[6346],"SafeERC20":[9984],"SingletonAuthentication":[8623],"Version":[4622]},"id":14156,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":13308,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:63"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":13310,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":9985,"src":"72:84:63","symbolAliases":[{"foreign":{"id":13309,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"81:9:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":13312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":10272,"src":"157:82:63","symbolAliases":[{"foreign":{"id":13311,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"166:7:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":13314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":8733,"src":"240:75:63","symbolAliases":[{"foreign":{"id":13313,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"249:8:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":13316,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":9633,"src":"316:72:63","symbolAliases":[{"foreign":{"id":13315,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"325:6:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":13318,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":719,"src":"390:116:63","symbolAliases":[{"foreign":{"id":13317,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"399:18:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","id":13320,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":570,"src":"507:114:63","symbolAliases":[{"foreign":{"id":13319,"name":"ICowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"516:17:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":13322,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":330,"src":"622:108:63","symbolAliases":[{"foreign":{"id":13321,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":329,"src":"631:14:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","id":13324,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":458,"src":"731:142:63","symbolAliases":[{"foreign":{"id":13323,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":457,"src":"744:29:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","id":13327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":422,"src":"874:139:63","symbolAliases":[{"foreign":{"id":13325,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"887:20:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13326,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":360,"src":"913:9:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":13329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":2320,"src":"1014:81:63","symbolAliases":[{"foreign":{"id":13328,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"1023:6:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":13331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":4623,"src":"1097:89:63","symbolAliases":[{"foreign":{"id":13330,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4622,"src":"1106:7:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":13333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":6347,"src":"1187:132:63","symbolAliases":[{"foreign":{"id":13332,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"1200:24:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":13335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14156,"sourceUnit":8624,"src":"1320:104:63","symbolAliases":[{"foreign":{"id":13334,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"1329:23:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":13337,"name":"ICowSwapFeeBurner","nameLocations":["1755:17:63"],"nodeType":"IdentifierPath","referencedDeclaration":569,"src":"1755:17:63"},"id":13338,"nodeType":"InheritanceSpecifier","src":"1755:17:63"},{"baseName":{"id":13339,"name":"SingletonAuthentication","nameLocations":["1774:23:63"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"1774:23:63"},"id":13340,"nodeType":"InheritanceSpecifier","src":"1774:23:63"},{"baseName":{"id":13341,"name":"ReentrancyGuardTransient","nameLocations":["1799:24:63"],"nodeType":"IdentifierPath","referencedDeclaration":6346,"src":"1799:24:63"},"id":13342,"nodeType":"InheritanceSpecifier","src":"1799:24:63"},{"baseName":{"id":13343,"name":"Version","nameLocations":["1825:7:63"],"nodeType":"IdentifierPath","referencedDeclaration":4622,"src":"1825:7:63"},"id":13344,"nodeType":"InheritanceSpecifier","src":"1825:7:63"}],"canonicalName":"CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":13336,"nodeType":"StructuredDocumentation","src":"1463:262:63","text":" @title CowSwapFeeBurner\n @notice A contract that burns protocol fees using CowSwap.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":14155,"linearizedBaseContracts":[14155,4622,101,6346,8623,6869,4159,81,569,457,10271,421,718,8732],"name":"CowSwapFeeBurner","nameLocation":"1735:16:63","nodeType":"ContractDefinition","nodes":[{"global":false,"id":13348,"libraryName":{"id":13345,"name":"SafeERC20","nameLocations":["1845:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":9984,"src":"1845:9:63"},"nodeType":"UsingForDirective","src":"1839:27:63","typeName":{"id":13347,"nodeType":"UserDefinedTypeName","pathNode":{"id":13346,"name":"IERC20","nameLocations":["1859:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1859:6:63"},"referencedDeclaration":9632,"src":"1859:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}},{"canonicalName":"CowSwapFeeBurner.ShortOrder","id":13358,"members":[{"constant":false,"id":13351,"mutability":"mutable","name":"tokenOut","nameLocation":"1907:8:63","nodeType":"VariableDeclaration","scope":13358,"src":"1900:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13350,"nodeType":"UserDefinedTypeName","pathNode":{"id":13349,"name":"IERC20","nameLocations":["1900:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1900:6:63"},"referencedDeclaration":9632,"src":"1900:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13353,"mutability":"mutable","name":"receiver","nameLocation":"1933:8:63","nodeType":"VariableDeclaration","scope":13358,"src":"1925:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13352,"name":"address","nodeType":"ElementaryTypeName","src":"1925:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13355,"mutability":"mutable","name":"minAmountOut","nameLocation":"1959:12:63","nodeType":"VariableDeclaration","scope":13358,"src":"1951:20:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13354,"name":"uint256","nodeType":"ElementaryTypeName","src":"1951:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13357,"mutability":"mutable","name":"deadline","nameLocation":"1988:8:63","nodeType":"VariableDeclaration","scope":13358,"src":"1981:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":13356,"name":"uint32","nodeType":"ElementaryTypeName","src":"1981:6:63","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"ShortOrder","nameLocation":"1879:10:63","nodeType":"StructDefinition","scope":14155,"src":"1872:131:63","visibility":"public"},{"constant":true,"id":13361,"mutability":"constant","name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nameLocation":"2034:35:63","nodeType":"VariableDeclaration","scope":14155,"src":"2009:73:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":13359,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2009:6:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783632616638646332","id":13360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2072:10:63","typeDescriptions":{"typeIdentifier":"t_rational_1655672258_by_1","typeString":"int_const 1655672258"},"value":"0x62af8dc2"},"visibility":"internal"},{"constant":false,"id":13366,"mutability":"immutable","name":"_sellKind","nameLocation":"2115:9:63","nodeType":"VariableDeclaration","scope":14155,"src":"2088:56:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13362,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2088:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"73656c6c","id":13364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2137:6:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""},"value":"sell"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""}],"id":13363,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2127:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":13365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2127:17:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13371,"mutability":"immutable","name":"_tokenBalance","nameLocation":"2177:13:63","nodeType":"VariableDeclaration","scope":14155,"src":"2150:61:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13367,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2150:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6572633230","id":13369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2203:7:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""},"value":"erc20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""}],"id":13368,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2193:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":13370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2193:18:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"functionSelector":"93504c52","id":13374,"mutability":"immutable","name":"composableCow","nameLocation":"2250:13:63","nodeType":"VariableDeclaration","scope":14155,"src":"2218:45:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"},"typeName":{"id":13373,"nodeType":"UserDefinedTypeName","pathNode":{"id":13372,"name":"IComposableCow","nameLocations":["2218:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":329,"src":"2218:14:63"},"referencedDeclaration":329,"src":"2218:14:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"visibility":"public"},{"constant":false,"functionSelector":"9b552cc2","id":13376,"mutability":"immutable","name":"vaultRelayer","nameLocation":"2294:12:63","nodeType":"VariableDeclaration","scope":14155,"src":"2269:37:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13375,"name":"address","nodeType":"ElementaryTypeName","src":"2269:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"8aebd348","id":13378,"mutability":"immutable","name":"appData","nameLocation":"2337:7:63","nodeType":"VariableDeclaration","scope":14155,"src":"2312:32:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2312:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":13384,"mutability":"mutable","name":"_orders","nameLocation":"2474:7:63","nodeType":"VariableDeclaration","scope":14155,"src":"2423:58:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"typeName":{"id":13383,"keyName":"token","keyNameLocation":"2438:5:63","keyType":{"id":13380,"nodeType":"UserDefinedTypeName","pathNode":{"id":13379,"name":"IERC20","nameLocations":["2431:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2431:6:63"},"referencedDeclaration":9632,"src":"2431:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"2423:41:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"valueName":"order","valueNameLocation":"2458:5:63","valueType":{"id":13382,"nodeType":"UserDefinedTypeName","pathNode":{"id":13381,"name":"ShortOrder","nameLocations":["2447:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":13358,"src":"2447:10:63"},"referencedDeclaration":13358,"src":"2447:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}}},"visibility":"internal"},{"body":{"id":13417,"nodeType":"Block","src":"2707:113:63","statements":[{"expression":{"id":13407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13405,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13374,"src":"2717:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13406,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"2733:14:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"src":"2717:30:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"id":13408,"nodeType":"ExpressionStatement","src":"2717:30:63"},{"expression":{"id":13411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13409,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"2757:12:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13410,"name":"_vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13392,"src":"2772:13:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2757:28:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13412,"nodeType":"ExpressionStatement","src":"2757:28:63"},{"expression":{"id":13415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13413,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13378,"src":"2795:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13414,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13394,"src":"2805:8:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2795:18:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":13416,"nodeType":"ExpressionStatement","src":"2795:18:63"}]},"id":13418,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":13399,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13387,"src":"2681:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":13400,"kind":"baseConstructorSpecifier","modifierName":{"id":13398,"name":"SingletonAuthentication","nameLocations":["2657:23:63"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"2657:23:63"},"nodeType":"ModifierInvocation","src":"2657:31:63"},{"arguments":[{"id":13402,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13396,"src":"2697:8:63","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":13403,"kind":"baseConstructorSpecifier","modifierName":{"id":13401,"name":"Version","nameLocations":["2689:7:63"],"nodeType":"IdentifierPath","referencedDeclaration":4622,"src":"2689:7:63"},"nodeType":"ModifierInvocation","src":"2689:17:63"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":13397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13387,"mutability":"mutable","name":"_vault","nameLocation":"2516:6:63","nodeType":"VariableDeclaration","scope":13418,"src":"2509:13:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":13386,"nodeType":"UserDefinedTypeName","pathNode":{"id":13385,"name":"IVault","nameLocations":["2509:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"2509:6:63"},"referencedDeclaration":2319,"src":"2509:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":13390,"mutability":"mutable","name":"_composableCow","nameLocation":"2547:14:63","nodeType":"VariableDeclaration","scope":13418,"src":"2532:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"},"typeName":{"id":13389,"nodeType":"UserDefinedTypeName","pathNode":{"id":13388,"name":"IComposableCow","nameLocations":["2532:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":329,"src":"2532:14:63"},"referencedDeclaration":329,"src":"2532:14:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":13392,"mutability":"mutable","name":"_vaultRelayer","nameLocation":"2579:13:63","nodeType":"VariableDeclaration","scope":13418,"src":"2571:21:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13391,"name":"address","nodeType":"ElementaryTypeName","src":"2571:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13394,"mutability":"mutable","name":"_appData","nameLocation":"2610:8:63","nodeType":"VariableDeclaration","scope":13418,"src":"2602:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2602:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13396,"mutability":"mutable","name":"_version","nameLocation":"2642:8:63","nodeType":"VariableDeclaration","scope":13418,"src":"2628:22:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":13395,"name":"string","nodeType":"ElementaryTypeName","src":"2628:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2499:157:63"},"returnParameters":{"id":13404,"nodeType":"ParameterList","parameters":[],"src":"2707:0:63"},"scope":14155,"src":"2488:332:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[529],"body":{"id":13432,"nodeType":"Block","src":"3152:42:63","statements":[{"expression":{"arguments":[{"id":13429,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13422,"src":"3179:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13428,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14023,"src":"3169:9:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$9632_$returns$_t_struct$_GPv2Order_$360_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":13430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3169:18:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":13427,"id":13431,"nodeType":"Return","src":"3162:25:63"}]},"documentation":{"id":13419,"nodeType":"StructuredDocumentation","src":"3039:33:63","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6eba2b13","id":13433,"implemented":true,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"3086:8:63","nodeType":"FunctionDefinition","parameters":{"id":13423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13422,"mutability":"mutable","name":"tokenIn","nameLocation":"3102:7:63","nodeType":"VariableDeclaration","scope":13433,"src":"3095:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13421,"nodeType":"UserDefinedTypeName","pathNode":{"id":13420,"name":"IERC20","nameLocations":["3095:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3095:6:63"},"referencedDeclaration":9632,"src":"3095:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3094:16:63"},"returnParameters":{"id":13427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13433,"src":"3134:16:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":13425,"nodeType":"UserDefinedTypeName","pathNode":{"id":13424,"name":"GPv2Order","nameLocations":["3134:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"3134:9:63"},"referencedDeclaration":360,"src":"3134:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3133:18:63"},"scope":14155,"src":"3077:117:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[539],"body":{"id":13450,"nodeType":"Block","src":"3321:64:63","statements":[{"expression":{"id":13448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13443,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13441,"src":"3332:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},null],"id":13444,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3331:10:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$__$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13446,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"3370:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13445,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14093,"src":"3344:25:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$9632_$returns$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":13447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3344:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"src":"3331:47:63","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13449,"nodeType":"ExpressionStatement","src":"3331:47:63"}]},"documentation":{"id":13434,"nodeType":"StructuredDocumentation","src":"3200:33:63","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6f9d75cd","id":13451,"implemented":true,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"3247:14:63","nodeType":"FunctionDefinition","parameters":{"id":13438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13437,"mutability":"mutable","name":"tokenIn","nameLocation":"3269:7:63","nodeType":"VariableDeclaration","scope":13451,"src":"3262:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13436,"nodeType":"UserDefinedTypeName","pathNode":{"id":13435,"name":"IERC20","nameLocations":["3262:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3262:6:63"},"referencedDeclaration":9632,"src":"3262:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3261:16:63"},"returnParameters":{"id":13442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13441,"mutability":"mutable","name":"status","nameLocation":"3313:6:63","nodeType":"VariableDeclaration","scope":13451,"src":"3301:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":13440,"nodeType":"UserDefinedTypeName","pathNode":{"id":13439,"name":"OrderStatus","nameLocations":["3301:11:63"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"3301:11:63"},"referencedDeclaration":483,"src":"3301:11:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"3300:20:63"},"scope":14155,"src":"3238:147:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[550],"body":{"id":13519,"nodeType":"Block","src":"3527:488:63","statements":[{"assignments":[13466,13468],"declarations":[{"constant":false,"id":13466,"mutability":"mutable","name":"status","nameLocation":"3550:6:63","nodeType":"VariableDeclaration","scope":13519,"src":"3538:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":13465,"nodeType":"UserDefinedTypeName","pathNode":{"id":13464,"name":"OrderStatus","nameLocations":["3538:11:63"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"3538:11:63"},"referencedDeclaration":483,"src":"3538:11:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":13468,"mutability":"mutable","name":"amount","nameLocation":"3566:6:63","nodeType":"VariableDeclaration","scope":13519,"src":"3558:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13467,"name":"uint256","nodeType":"ElementaryTypeName","src":"3558:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13472,"initialValue":{"arguments":[{"id":13470,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13455,"src":"3602:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13469,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14093,"src":"3576:25:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$9632_$returns$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":13471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3576:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3537:73:63"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":13476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13473,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13466,"src":"3625:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13474,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"3635:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":13475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3647:6:63","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":482,"src":"3635:18:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"3625:28:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13482,"nodeType":"IfStatement","src":"3621:98:63","trueBody":{"id":13481,"nodeType":"Block","src":"3655:64:63","statements":[{"errorCall":{"arguments":[{"id":13478,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13466,"src":"3701:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":13477,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":516,"src":"3676:24:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$483_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":13479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3676:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13480,"nodeType":"RevertStatement","src":"3669:39:63"}]}},{"expression":{"arguments":[{"id":13484,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13457,"src":"3748:12:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13483,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14124,"src":"3729:18:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3729:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13486,"nodeType":"ExpressionStatement","src":"3729:32:63"},{"expression":{"arguments":[{"id":13488,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13459,"src":"3786:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13487,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"3771:14:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":13489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3771:24:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13490,"nodeType":"ExpressionStatement","src":"3771:24:63"},{"expression":{"id":13496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":13491,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"3806:7:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":13493,"indexExpression":{"id":13492,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13455,"src":"3814:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3806:16:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":13494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3823:12:63","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":13355,"src":"3806:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13495,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13457,"src":"3838:12:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3806:44:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13497,"nodeType":"ExpressionStatement","src":"3806:44:63"},{"expression":{"id":13506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":13498,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"3860:7:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":13500,"indexExpression":{"id":13499,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13455,"src":"3868:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3860:16:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":13501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3877:8:63","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":13357,"src":"3860:25:63","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13504,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13459,"src":"3895:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13503,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3888:6:63","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":13502,"name":"uint32","nodeType":"ElementaryTypeName","src":"3888:6:63","typeDescriptions":{}}},"id":13505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3888:16:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3860:44:63","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":13507,"nodeType":"ExpressionStatement","src":"3860:44:63"},{"expression":{"arguments":[{"id":13509,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13455,"src":"3931:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13508,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14154,"src":"3915:15:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$returns$__$","typeString":"function (contract IERC20)"}},"id":13510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3915:24:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13511,"nodeType":"ExpressionStatement","src":"3915:24:63"},{"eventCall":{"arguments":[{"id":13513,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13455,"src":"3968:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13514,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13468,"src":"3977:6:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13515,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13457,"src":"3985:12:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13516,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13459,"src":"3999:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13512,"name":"OrderRetried","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":495,"src":"3955:12:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$9632_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256,uint256,uint256)"}},"id":13517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3955:53:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13518,"nodeType":"EmitStatement","src":"3950:58:63"}]},"documentation":{"id":13452,"nodeType":"StructuredDocumentation","src":"3391:33:63","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"d83b06a4","id":13520,"implemented":true,"kind":"function","modifiers":[{"id":13462,"kind":"modifierInvocation","modifierName":{"id":13461,"name":"authenticate","nameLocations":["3514:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"3514:12:63"},"nodeType":"ModifierInvocation","src":"3514:12:63"}],"name":"retryOrder","nameLocation":"3438:10:63","nodeType":"FunctionDefinition","parameters":{"id":13460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13455,"mutability":"mutable","name":"tokenIn","nameLocation":"3456:7:63","nodeType":"VariableDeclaration","scope":13520,"src":"3449:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13454,"nodeType":"UserDefinedTypeName","pathNode":{"id":13453,"name":"IERC20","nameLocations":["3449:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3449:6:63"},"referencedDeclaration":9632,"src":"3449:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13457,"mutability":"mutable","name":"minAmountOut","nameLocation":"3473:12:63","nodeType":"VariableDeclaration","scope":13520,"src":"3465:20:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13456,"name":"uint256","nodeType":"ElementaryTypeName","src":"3465:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13459,"mutability":"mutable","name":"deadline","nameLocation":"3495:8:63","nodeType":"VariableDeclaration","scope":13520,"src":"3487:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13458,"name":"uint256","nodeType":"ElementaryTypeName","src":"3487:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3448:56:63"},"returnParameters":{"id":13463,"nodeType":"ParameterList","parameters":[],"src":"3527:0:63"},"scope":14155,"src":"3429:586:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[559],"body":{"id":13556,"nodeType":"Block","src":"4136:248:63","statements":[{"assignments":[13533,13535],"declarations":[{"constant":false,"id":13533,"mutability":"mutable","name":"status","nameLocation":"4159:6:63","nodeType":"VariableDeclaration","scope":13556,"src":"4147:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":13532,"nodeType":"UserDefinedTypeName","pathNode":{"id":13531,"name":"OrderStatus","nameLocations":["4147:11:63"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"4147:11:63"},"referencedDeclaration":483,"src":"4147:11:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":13535,"mutability":"mutable","name":"amount","nameLocation":"4175:6:63","nodeType":"VariableDeclaration","scope":13556,"src":"4167:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13534,"name":"uint256","nodeType":"ElementaryTypeName","src":"4167:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13539,"initialValue":{"arguments":[{"id":13537,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13524,"src":"4211:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13536,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14093,"src":"4185:25:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$9632_$returns$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":13538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4185:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4146:73:63"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":13543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13540,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13533,"src":"4234:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13541,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"4244:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":13542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4256:6:63","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":482,"src":"4244:18:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"4234:28:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13549,"nodeType":"IfStatement","src":"4230:98:63","trueBody":{"id":13548,"nodeType":"Block","src":"4264:64:63","statements":[{"errorCall":{"arguments":[{"id":13545,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13533,"src":"4310:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":13544,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":516,"src":"4285:24:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$483_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":13546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4285:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13547,"nodeType":"RevertStatement","src":"4278:39:63"}]}},{"expression":{"arguments":[{"id":13551,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13524,"src":"4351:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13552,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13526,"src":"4360:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13553,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13535,"src":"4370:6:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13550,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13618,"src":"4338:12:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":13554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4338:39:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13555,"nodeType":"ExpressionStatement","src":"4338:39:63"}]},"documentation":{"id":13521,"nodeType":"StructuredDocumentation","src":"4021:33:63","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"60e092c6","id":13557,"implemented":true,"kind":"function","modifiers":[{"id":13529,"kind":"modifierInvocation","modifierName":{"id":13528,"name":"authenticate","nameLocations":["4123:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"4123:12:63"},"nodeType":"ModifierInvocation","src":"4123:12:63"}],"name":"cancelOrder","nameLocation":"4068:11:63","nodeType":"FunctionDefinition","parameters":{"id":13527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13524,"mutability":"mutable","name":"tokenIn","nameLocation":"4087:7:63","nodeType":"VariableDeclaration","scope":13557,"src":"4080:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13523,"nodeType":"UserDefinedTypeName","pathNode":{"id":13522,"name":"IERC20","nameLocations":["4080:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4080:6:63"},"referencedDeclaration":9632,"src":"4080:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13526,"mutability":"mutable","name":"receiver","nameLocation":"4104:8:63","nodeType":"VariableDeclaration","scope":13557,"src":"4096:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13525,"name":"address","nodeType":"ElementaryTypeName","src":"4096:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4079:34:63"},"returnParameters":{"id":13530,"nodeType":"ParameterList","parameters":[],"src":"4136:0:63"},"scope":14155,"src":"4059:325:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[568],"body":{"id":13580,"nodeType":"Block","src":"4514:82:63","statements":[{"expression":{"arguments":[{"id":13569,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"4537:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13570,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"4546:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":13575,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4582:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}],"id":13574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4574:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13573,"name":"address","nodeType":"ElementaryTypeName","src":"4574:7:63","typeDescriptions":{}}},"id":13576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4574:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13571,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"4556:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":13572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4564:9:63","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"4556:17:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":13577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4556:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13568,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13618,"src":"4524:12:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":13578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4524:65:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13579,"nodeType":"ExpressionStatement","src":"4524:65:63"}]},"documentation":{"id":13558,"nodeType":"StructuredDocumentation","src":"4390:33:63","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"68bce712","id":13581,"implemented":true,"kind":"function","modifiers":[{"id":13566,"kind":"modifierInvocation","modifierName":{"id":13565,"name":"authenticate","nameLocations":["4501:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"4501:12:63"},"nodeType":"ModifierInvocation","src":"4501:12:63"}],"name":"emergencyCancelOrder","nameLocation":"4437:20:63","nodeType":"FunctionDefinition","parameters":{"id":13564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13561,"mutability":"mutable","name":"tokenIn","nameLocation":"4465:7:63","nodeType":"VariableDeclaration","scope":13581,"src":"4458:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13560,"nodeType":"UserDefinedTypeName","pathNode":{"id":13559,"name":"IERC20","nameLocations":["4458:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4458:6:63"},"referencedDeclaration":9632,"src":"4458:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13563,"mutability":"mutable","name":"receiver","nameLocation":"4482:8:63","nodeType":"VariableDeclaration","scope":13581,"src":"4474:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13562,"name":"address","nodeType":"ElementaryTypeName","src":"4474:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4457:34:63"},"returnParameters":{"id":13567,"nodeType":"ParameterList","parameters":[],"src":"4514:0:63"},"scope":14155,"src":"4428:168:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13617,"nodeType":"Block","src":"4683:203:63","statements":[{"expression":{"arguments":[{"id":13594,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"4714:12:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":13595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4728:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":13591,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13584,"src":"4693:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":13593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4701:12:63","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":9892,"src":"4693:20:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":13596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4693:37:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13597,"nodeType":"ExpressionStatement","src":"4693:37:63"},{"expression":{"id":13601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4740:23:63","subExpression":{"baseExpression":{"id":13598,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"4747:7:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":13600,"indexExpression":{"id":13599,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13584,"src":"4755:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4747:16:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13602,"nodeType":"ExpressionStatement","src":"4740:23:63"},{"expression":{"arguments":[{"id":13606,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13584,"src":"4797:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13607,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13586,"src":"4806:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13608,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13588,"src":"4816:6:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13603,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"4774:9:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$9984_$","typeString":"type(library SafeERC20)"}},"id":13605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4784:12:63","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"4774:22:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":13609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4774:49:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13610,"nodeType":"ExpressionStatement","src":"4774:49:63"},{"eventCall":{"arguments":[{"id":13612,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13584,"src":"4853:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13613,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13588,"src":"4862:6:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13614,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13586,"src":"4870:8:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13611,"name":"OrderCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":505,"src":"4839:13:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$returns$__$","typeString":"function (contract IERC20,uint256,address)"}},"id":13615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4839:40:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13616,"nodeType":"EmitStatement","src":"4834:45:63"}]},"id":13618,"implemented":true,"kind":"function","modifiers":[],"name":"_cancelOrder","nameLocation":"4611:12:63","nodeType":"FunctionDefinition","parameters":{"id":13589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13584,"mutability":"mutable","name":"tokenIn","nameLocation":"4631:7:63","nodeType":"VariableDeclaration","scope":13618,"src":"4624:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13583,"nodeType":"UserDefinedTypeName","pathNode":{"id":13582,"name":"IERC20","nameLocations":["4624:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4624:6:63"},"referencedDeclaration":9632,"src":"4624:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13586,"mutability":"mutable","name":"receiver","nameLocation":"4648:8:63","nodeType":"VariableDeclaration","scope":13618,"src":"4640:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13585,"name":"address","nodeType":"ElementaryTypeName","src":"4640:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13588,"mutability":"mutable","name":"amount","nameLocation":"4666:6:63","nodeType":"VariableDeclaration","scope":13618,"src":"4658:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13587,"name":"uint256","nodeType":"ElementaryTypeName","src":"4658:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4623:50:63"},"returnParameters":{"id":13590,"nodeType":"ParameterList","parameters":[],"src":"4683:0:63"},"scope":14155,"src":"4602:284:63","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[717],"body":{"id":13653,"nodeType":"Block","src":"5416:248:63","statements":[{"expression":{"arguments":[{"id":13643,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13621,"src":"5445:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13644,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13624,"src":"5463:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13645,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13626,"src":"5485:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13646,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13629,"src":"5520:11:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13647,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13631,"src":"5545:23:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13648,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13633,"src":"5582:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13649,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13635,"src":"5605:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":13650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5627:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":13642,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13773,"src":"5426:5:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":13651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5426:231:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13652,"nodeType":"ExpressionStatement","src":"5426:231:63"}]},"documentation":{"id":13619,"nodeType":"StructuredDocumentation","src":"5106:34:63","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":13654,"implemented":true,"kind":"function","modifiers":[{"id":13638,"kind":"modifierInvocation","modifierName":{"id":13637,"name":"authenticate","nameLocations":["5390:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"5390:12:63"},"nodeType":"ModifierInvocation","src":"5390:12:63"},{"id":13640,"kind":"modifierInvocation","modifierName":{"id":13639,"name":"nonReentrant","nameLocations":["5403:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":6301,"src":"5403:12:63"},"nodeType":"ModifierInvocation","src":"5403:12:63"}],"name":"burn","nameLocation":"5154:4:63","nodeType":"FunctionDefinition","parameters":{"id":13636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13621,"mutability":"mutable","name":"pool","nameLocation":"5176:4:63","nodeType":"VariableDeclaration","scope":13654,"src":"5168:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13620,"name":"address","nodeType":"ElementaryTypeName","src":"5168:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13624,"mutability":"mutable","name":"feeToken","nameLocation":"5197:8:63","nodeType":"VariableDeclaration","scope":13654,"src":"5190:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13623,"nodeType":"UserDefinedTypeName","pathNode":{"id":13622,"name":"IERC20","nameLocations":["5190:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5190:6:63"},"referencedDeclaration":9632,"src":"5190:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13626,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"5223:21:63","nodeType":"VariableDeclaration","scope":13654,"src":"5215:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13625,"name":"uint256","nodeType":"ElementaryTypeName","src":"5215:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13629,"mutability":"mutable","name":"targetToken","nameLocation":"5261:11:63","nodeType":"VariableDeclaration","scope":13654,"src":"5254:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13628,"nodeType":"UserDefinedTypeName","pathNode":{"id":13627,"name":"IERC20","nameLocations":["5254:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5254:6:63"},"referencedDeclaration":9632,"src":"5254:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13631,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5290:23:63","nodeType":"VariableDeclaration","scope":13654,"src":"5282:31:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13630,"name":"uint256","nodeType":"ElementaryTypeName","src":"5282:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13633,"mutability":"mutable","name":"recipient","nameLocation":"5331:9:63","nodeType":"VariableDeclaration","scope":13654,"src":"5323:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13632,"name":"address","nodeType":"ElementaryTypeName","src":"5323:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13635,"mutability":"mutable","name":"deadline","nameLocation":"5358:8:63","nodeType":"VariableDeclaration","scope":13654,"src":"5350:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13634,"name":"uint256","nodeType":"ElementaryTypeName","src":"5350:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5158:214:63"},"returnParameters":{"id":13641,"nodeType":"ParameterList","parameters":[],"src":"5416:0:63"},"scope":14155,"src":"5145:519:63","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":13772,"nodeType":"Block","src":"5928:1103:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"id":13677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13675,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13664,"src":"5942:11:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":13676,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"5957:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"5942:23:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13683,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13661,"src":"6074:14:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6092:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6074:19:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13691,"nodeType":"IfStatement","src":"6070:107:63","trueBody":{"id":13690,"nodeType":"Block","src":"6095:82:63","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616d6f756e74206973207a65726f","id":13687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6139:26:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""},"value":"Fee token amount is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""}],"id":13686,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":510,"src":"6116:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":13688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6116:50:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13689,"nodeType":"RevertStatement","src":"6109:57:63"}]}},"id":13692,"nodeType":"IfStatement","src":"5938:239:63","trueBody":{"id":13682,"nodeType":"Block","src":"5967:97:63","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616e642074617267657420746f6b656e20617265207468652073616d65","id":13679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6011:41:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""},"value":"Fee token and target token are the same"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""}],"id":13678,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":510,"src":"5988:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":13680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5988:65:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13681,"nodeType":"RevertStatement","src":"5981:72:63"}]}},{"expression":{"arguments":[{"id":13694,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"6206:23:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13693,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14124,"src":"6187:18:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6187:43:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13696,"nodeType":"ExpressionStatement","src":"6187:43:63"},{"expression":{"arguments":[{"id":13698,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13670,"src":"6255:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13697,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"6240:14:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":13699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6240:24:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13700,"nodeType":"ExpressionStatement","src":"6240:24:63"},{"assignments":[13703,null],"declarations":[{"constant":false,"id":13703,"mutability":"mutable","name":"status","nameLocation":"6288:6:63","nodeType":"VariableDeclaration","scope":13772,"src":"6276:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":13702,"nodeType":"UserDefinedTypeName","pathNode":{"id":13701,"name":"OrderStatus","nameLocations":["6276:11:63"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"6276:11:63"},"referencedDeclaration":483,"src":"6276:11:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},null],"id":13707,"initialValue":{"arguments":[{"id":13705,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"6326:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13704,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14093,"src":"6300:25:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$9632_$returns$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":13706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6300:35:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6275:60:63"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":13711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13708,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13703,"src":"6349:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13709,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"6359:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":13710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6371:11:63","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":479,"src":"6359:23:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6349:33:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":13715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13712,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13703,"src":"6386:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":13713,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"6396:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":13714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6408:6:63","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":481,"src":"6396:18:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6386:28:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6349:65:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13722,"nodeType":"IfStatement","src":"6345:135:63","trueBody":{"id":13721,"nodeType":"Block","src":"6416:64:63","statements":[{"errorCall":{"arguments":[{"id":13718,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13703,"src":"6462:6:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":13717,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":516,"src":"6437:24:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$483_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":13719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6437:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13720,"nodeType":"RevertStatement","src":"6430:39:63"}]}},{"condition":{"id":13723,"name":"pullFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"6494:12:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13737,"nodeType":"IfStatement","src":"6490:111:63","trueBody":{"id":13736,"nodeType":"Block","src":"6508:93:63","statements":[{"expression":{"arguments":[{"expression":{"id":13727,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6548:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6552:6:63","memberName":"sender","nodeType":"MemberAccess","src":"6548:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":13731,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6568:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}],"id":13730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6560:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13729,"name":"address","nodeType":"ElementaryTypeName","src":"6560:7:63","typeDescriptions":{}}},"id":13732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6560:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13733,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13661,"src":"6575:14:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13724,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"6522:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":13726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6531:16:63","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":9771,"src":"6522:25:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":13734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6522:68:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13735,"nodeType":"ExpressionStatement","src":"6522:68:63"}]}},{"expression":{"arguments":[{"id":13739,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"6627:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13738,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14154,"src":"6611:15:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$returns$__$","typeString":"function (contract IERC20)"}},"id":13740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6611:25:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13741,"nodeType":"ExpressionStatement","src":"6611:25:63"},{"expression":{"arguments":[{"id":13745,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"6669:12:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13746,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13661,"src":"6683:14:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13742,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"6647:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":13744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6656:12:63","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":9892,"src":"6647:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":13747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6647:51:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13748,"nodeType":"ExpressionStatement","src":"6647:51:63"},{"expression":{"id":13761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13749,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"6709:7:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":13751,"indexExpression":{"id":13750,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"6717:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6709:17:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13753,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13664,"src":"6764:11:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13754,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"6799:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13755,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"6836:23:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":13758,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13670,"src":"6890:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6883:6:63","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":13756,"name":"uint32","nodeType":"ElementaryTypeName","src":"6883:6:63","typeDescriptions":{}}},"id":13759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6883:16:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":13752,"name":"ShortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13358,"src":"6729:10:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ShortOrder_$13358_storage_ptr_$","typeString":"type(struct CowSwapFeeBurner.ShortOrder storage pointer)"}},"id":13760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["6754:8:63","6789:8:63","6822:12:63","6873:8:63"],"names":["tokenOut","receiver","minAmountOut","deadline"],"nodeType":"FunctionCall","src":"6729:181:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"src":"6709:201:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":13762,"nodeType":"ExpressionStatement","src":"6709:201:63"},{"eventCall":{"arguments":[{"id":13764,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13656,"src":"6944:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13765,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13659,"src":"6950:8:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13766,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13661,"src":"6960:14:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13767,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13664,"src":"6976:11:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":13768,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13666,"src":"6989:23:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13769,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"7014:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13763,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":684,"src":"6926:17:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":13770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6926:98:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13771,"nodeType":"EmitStatement","src":"6921:103:63"}]},"id":13773,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"5679:5:63","nodeType":"FunctionDefinition","parameters":{"id":13673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13656,"mutability":"mutable","name":"pool","nameLocation":"5702:4:63","nodeType":"VariableDeclaration","scope":13773,"src":"5694:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13655,"name":"address","nodeType":"ElementaryTypeName","src":"5694:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13659,"mutability":"mutable","name":"feeToken","nameLocation":"5723:8:63","nodeType":"VariableDeclaration","scope":13773,"src":"5716:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13658,"nodeType":"UserDefinedTypeName","pathNode":{"id":13657,"name":"IERC20","nameLocations":["5716:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5716:6:63"},"referencedDeclaration":9632,"src":"5716:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13661,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"5749:14:63","nodeType":"VariableDeclaration","scope":13773,"src":"5741:22:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13660,"name":"uint256","nodeType":"ElementaryTypeName","src":"5741:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13664,"mutability":"mutable","name":"targetToken","nameLocation":"5780:11:63","nodeType":"VariableDeclaration","scope":13773,"src":"5773:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13663,"nodeType":"UserDefinedTypeName","pathNode":{"id":13662,"name":"IERC20","nameLocations":["5773:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"5773:6:63"},"referencedDeclaration":9632,"src":"5773:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":13666,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5809:23:63","nodeType":"VariableDeclaration","scope":13773,"src":"5801:31:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13665,"name":"uint256","nodeType":"ElementaryTypeName","src":"5801:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13668,"mutability":"mutable","name":"recipient","nameLocation":"5850:9:63","nodeType":"VariableDeclaration","scope":13773,"src":"5842:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13667,"name":"address","nodeType":"ElementaryTypeName","src":"5842:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13670,"mutability":"mutable","name":"deadline","nameLocation":"5877:8:63","nodeType":"VariableDeclaration","scope":13773,"src":"5869:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13669,"name":"uint256","nodeType":"ElementaryTypeName","src":"5869:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13672,"mutability":"mutable","name":"pullFeeToken","nameLocation":"5900:12:63","nodeType":"VariableDeclaration","scope":13773,"src":"5895:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13671,"name":"bool","nodeType":"ElementaryTypeName","src":"5895:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5684:234:63"},"returnParameters":{"id":13674,"nodeType":"ParameterList","parameters":[],"src":"5928:0:63"},"scope":14155,"src":"5670:1361:63","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[456],"body":{"id":13807,"nodeType":"Block","src":"7486:112:63","statements":[{"assignments":[13792],"declarations":[{"constant":false,"id":13792,"mutability":"mutable","name":"tokenIn","nameLocation":"7503:7:63","nodeType":"VariableDeclaration","scope":13807,"src":"7496:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13791,"nodeType":"UserDefinedTypeName","pathNode":{"id":13790,"name":"IERC20","nameLocations":["7496:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"7496:6:63"},"referencedDeclaration":9632,"src":"7496:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":13802,"initialValue":{"arguments":[{"arguments":[{"id":13796,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13782,"src":"7531:11:63","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"components":[{"id":13798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7545:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13797,"name":"address","nodeType":"ElementaryTypeName","src":"7545:7:63","typeDescriptions":{}}}],"id":13799,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7544:9:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":13794,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7520:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7524:6:63","memberName":"decode","nodeType":"MemberAccess","src":"7520:10:63","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":13800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7520:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":13793,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"7513:6:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$9632_$","typeString":"type(contract IERC20)"}},"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7513:42:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"7496:59:63"},{"expression":{"arguments":[{"id":13804,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13792,"src":"7583:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":13803,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14023,"src":"7573:9:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$9632_$returns$_t_struct$_GPv2Order_$360_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":13805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7573:18:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":13789,"id":13806,"nodeType":"Return","src":"7566:25:63"}]},"documentation":{"id":13774,"nodeType":"StructuredDocumentation","src":"7253:45:63","text":"@inheritdoc ICowConditionalOrderGenerator"},"functionSelector":"b8296fc4","id":13808,"implemented":true,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"7312:17:63","nodeType":"FunctionDefinition","parameters":{"id":13785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13776,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13808,"src":"7339:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13775,"name":"address","nodeType":"ElementaryTypeName","src":"7339:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13808,"src":"7356:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13777,"name":"address","nodeType":"ElementaryTypeName","src":"7356:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13808,"src":"7373:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13779,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7373:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13782,"mutability":"mutable","name":"staticInput","nameLocation":"7405:11:63","nodeType":"VariableDeclaration","scope":13808,"src":"7390:26:63","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13781,"name":"bytes","nodeType":"ElementaryTypeName","src":"7390:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13784,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13808,"src":"7426:14:63","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13783,"name":"bytes","nodeType":"ElementaryTypeName","src":"7426:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7329:117:63"},"returnParameters":{"id":13789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13808,"src":"7468:16:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":13787,"nodeType":"UserDefinedTypeName","pathNode":{"id":13786,"name":"GPv2Order","nameLocations":["7468:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"7468:9:63"},"referencedDeclaration":360,"src":"7468:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"7467:18:63"},"scope":14155,"src":"7303:295:63","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[420],"body":{"id":13873,"nodeType":"Block","src":"7892:418:63","statements":[{"assignments":[13831],"declarations":[{"constant":false,"id":13831,"mutability":"mutable","name":"savedOrder","nameLocation":"7919:10:63","nodeType":"VariableDeclaration","scope":13873,"src":"7902:27:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":13830,"nodeType":"UserDefinedTypeName","pathNode":{"id":13829,"name":"GPv2Order","nameLocations":["7902:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"7902:9:63"},"referencedDeclaration":360,"src":"7902:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"id":13839,"initialValue":{"arguments":[{"id":13833,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13811,"src":"7950:5:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13834,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13813,"src":"7957:6:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13835,"name":"ctx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13819,"src":"7965:3:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":13836,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13821,"src":"7970:11:63","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":13837,"name":"offchainInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13823,"src":"7983:13:63","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":13832,"name":"getTradeableOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13808,"src":"7932:17:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_struct$_GPv2Order_$360_memory_ptr_$","typeString":"function (address,address,bytes32,bytes calldata,bytes calldata) view returns (struct GPv2Order memory)"}},"id":13838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7932:65:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}},"nodeType":"VariableDeclarationStatement","src":"7902:95:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13840,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13826,"src":"8012:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":13841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8019:9:63","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":345,"src":"8012:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":13842,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13831,"src":"8031:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}},"id":13843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8042:9:63","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":345,"src":"8031:20:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8012:39:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13853,"nodeType":"IfStatement","src":"8008:109:63","trueBody":{"id":13852,"nodeType":"Block","src":"8053:64:63","statements":[{"expression":{"id":13850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13845,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13831,"src":"8067:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}},"id":13847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8078:9:63","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":345,"src":"8067:20:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13848,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13826,"src":"8090:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":13849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8097:9:63","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":345,"src":"8090:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8067:39:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13851,"nodeType":"ExpressionStatement","src":"8067:39:63"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":13866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":13857,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13831,"src":"8152:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":13855,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8141:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8145:6:63","memberName":"encode","nodeType":"MemberAccess","src":"8141:10:63","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8141:22:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13854,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8131:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":13859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8131:33:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"arguments":[{"id":13863,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13826,"src":"8189:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_calldata_ptr","typeString":"struct GPv2Order calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$360_calldata_ptr","typeString":"struct GPv2Order calldata"}],"expression":{"id":13861,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8178:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8182:6:63","memberName":"encode","nodeType":"MemberAccess","src":"8178:10:63","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8178:18:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13860,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8168:9:63","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":13865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8168:29:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8131:66:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13872,"nodeType":"IfStatement","src":"8127:177:63","trueBody":{"id":13871,"nodeType":"Block","src":"8199:105:63","statements":[{"errorCall":{"arguments":[{"hexValue":"566572696679206f7264657220646f6573206e6f74206d617463682077697468206578697374696e67206f72646572","id":13868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8243:49:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""},"value":"Verify order does not match with existing order"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""}],"id":13867,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":510,"src":"8220:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":13869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8220:73:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13870,"nodeType":"RevertStatement","src":"8213:80:63"}]}}]},"documentation":{"id":13809,"nodeType":"StructuredDocumentation","src":"7604:36:63","text":"@inheritdoc ICowConditionalOrder"},"functionSelector":"14a2a784","id":13874,"implemented":true,"kind":"function","modifiers":[],"name":"verify","nameLocation":"7654:6:63","nodeType":"FunctionDefinition","parameters":{"id":13827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13811,"mutability":"mutable","name":"owner","nameLocation":"7678:5:63","nodeType":"VariableDeclaration","scope":13874,"src":"7670:13:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13810,"name":"address","nodeType":"ElementaryTypeName","src":"7670:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13813,"mutability":"mutable","name":"sender","nameLocation":"7701:6:63","nodeType":"VariableDeclaration","scope":13874,"src":"7693:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13812,"name":"address","nodeType":"ElementaryTypeName","src":"7693:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13874,"src":"7717:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13814,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7717:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13874,"src":"7734:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13816,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7734:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13819,"mutability":"mutable","name":"ctx","nameLocation":"7759:3:63","nodeType":"VariableDeclaration","scope":13874,"src":"7751:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7751:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13821,"mutability":"mutable","name":"staticInput","nameLocation":"7787:11:63","nodeType":"VariableDeclaration","scope":13874,"src":"7772:26:63","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13820,"name":"bytes","nodeType":"ElementaryTypeName","src":"7772:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13823,"mutability":"mutable","name":"offchainInput","nameLocation":"7823:13:63","nodeType":"VariableDeclaration","scope":13874,"src":"7808:28:63","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13822,"name":"bytes","nodeType":"ElementaryTypeName","src":"7808:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13826,"mutability":"mutable","name":"_order","nameLocation":"7865:6:63","nodeType":"VariableDeclaration","scope":13874,"src":"7846:25:63","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":13825,"nodeType":"UserDefinedTypeName","pathNode":{"id":13824,"name":"GPv2Order","nameLocations":["7846:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"7846:9:63"},"referencedDeclaration":360,"src":"7846:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"7660:217:63"},"returnParameters":{"id":13828,"nodeType":"ParameterList","parameters":[],"src":"7892:0:63"},"scope":14155,"src":"7645:665:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[8731],"body":{"id":13925,"nodeType":"Block","src":"8654:530:63","statements":[{"assignments":[13886,13889],"declarations":[{"constant":false,"id":13886,"mutability":"mutable","name":"order","nameLocation":"8682:5:63","nodeType":"VariableDeclaration","scope":13925,"src":"8665:22:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":13885,"nodeType":"UserDefinedTypeName","pathNode":{"id":13884,"name":"GPv2Order","nameLocations":["8665:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"8665:9:63"},"referencedDeclaration":360,"src":"8665:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"},{"constant":false,"id":13889,"mutability":"mutable","name":"payload","nameLocation":"8719:7:63","nodeType":"VariableDeclaration","scope":13925,"src":"8689:37:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$294_memory_ptr","typeString":"struct IComposableCow.Payload"},"typeName":{"id":13888,"nodeType":"UserDefinedTypeName","pathNode":{"id":13887,"name":"IComposableCow.Payload","nameLocations":["8689:14:63","8704:7:63"],"nodeType":"IdentifierPath","referencedDeclaration":294,"src":"8689:22:63"},"referencedDeclaration":294,"src":"8689:22:63","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$294_storage_ptr","typeString":"struct IComposableCow.Payload"}},"visibility":"internal"}],"id":13898,"initialValue":{"arguments":[{"id":13892,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13879,"src":"8754:9:63","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":13893,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":360,"src":"8778:9:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$360_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},{"expression":{"id":13894,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":329,"src":"8789:14:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IComposableCow_$329_$","typeString":"type(contract IComposableCow)"}},"id":13895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8804:7:63","memberName":"Payload","nodeType":"MemberAccess","referencedDeclaration":294,"src":"8789:22:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Payload_$294_storage_ptr_$","typeString":"type(struct IComposableCow.Payload storage pointer)"}}],"id":13896,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8777:35:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$360_storage_ptr_$_$_t_type$_t_struct$_Payload_$294_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$360_storage_ptr_$_$_t_type$_t_struct$_Payload_$294_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}],"expression":{"id":13890,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8730:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8734:6:63","memberName":"decode","nodeType":"MemberAccess","src":"8730:10:63","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":13897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8730:92:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_GPv2Order_$360_memory_ptr_$_t_struct$_Payload_$294_memory_ptr_$","typeString":"tuple(struct GPv2Order memory,struct IComposableCow.Payload memory)"}},"nodeType":"VariableDeclarationStatement","src":"8664:158:63"},{"expression":{"arguments":[{"arguments":[{"id":13903,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8958:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}],"id":13902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8950:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13901,"name":"address","nodeType":"ElementaryTypeName","src":"8950:7:63","typeDescriptions":{}}},"id":13904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8950:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13905,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8981:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8985:6:63","memberName":"sender","nodeType":"MemberAccess","src":"8981:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13907,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13877,"src":"9009:5:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13908,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13374,"src":"9032:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"id":13909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9046:15:63","memberName":"domainSeparator","nodeType":"MemberAccess","referencedDeclaration":308,"src":"9032:29:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":13910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9032:31:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":13913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9089:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9081:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":13911,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9081:7:63","typeDescriptions":{}}},"id":13914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9081:10:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":13917,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13886,"src":"9120:5:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":13915,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9109:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9113:6:63","memberName":"encode","nodeType":"MemberAccess","src":"9109:10:63","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9109:17:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":13921,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13889,"src":"9155:7:63","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$294_memory_ptr","typeString":"struct IComposableCow.Payload memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Payload_$294_memory_ptr","typeString":"struct IComposableCow.Payload memory"}],"expression":{"id":13919,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9144:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9148:6:63","memberName":"encode","nodeType":"MemberAccess","src":"9144:10:63","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9144:19:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13899,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13374,"src":"8898:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"id":13900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8912:20:63","memberName":"isValidSafeSignature","nodeType":"MemberAccess","referencedDeclaration":328,"src":"8898:34:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,bytes32,bytes32,bytes32,bytes memory,bytes memory) view external returns (bytes4)"}},"id":13923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8898:279:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":13883,"id":13924,"nodeType":"Return","src":"8879:298:63"}]},"documentation":{"id":13875,"nodeType":"StructuredDocumentation","src":"8529:24:63","text":"@inheritdoc IERC1271"},"functionSelector":"1626ba7e","id":13926,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"8567:16:63","nodeType":"FunctionDefinition","parameters":{"id":13880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13877,"mutability":"mutable","name":"_hash","nameLocation":"8592:5:63","nodeType":"VariableDeclaration","scope":13926,"src":"8584:13:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13876,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8584:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":13879,"mutability":"mutable","name":"signature","nameLocation":"8612:9:63","nodeType":"VariableDeclaration","scope":13926,"src":"8599:22:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13878,"name":"bytes","nodeType":"ElementaryTypeName","src":"8599:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8583:39:63"},"returnParameters":{"id":13883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13926,"src":"8646:6:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":13881,"name":"bytes4","nodeType":"ElementaryTypeName","src":"8646:6:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"8645:8:63"},"scope":14155,"src":"8558:626:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[10270],"body":{"id":13970,"nodeType":"Block","src":"9292:504:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":13936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13934,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13929,"src":"9397:11:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":13935,"name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13361,"src":"9412:35:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9397:50:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13941,"nodeType":"IfStatement","src":"9393:123:63","trueBody":{"id":13940,"nodeType":"Block","src":"9449:67:63","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13937,"name":"InterfaceIsSignatureVerifierMuxer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":519,"src":"9470:33:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9470:35:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13939,"nodeType":"RevertStatement","src":"9463:42:63"}]}},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":13947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13942,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13929,"src":"9545:11:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":13944,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"9565:20:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$421_$","typeString":"type(contract ICowConditionalOrder)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$421_$","typeString":"type(contract ICowConditionalOrder)"}],"id":13943,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9560:4:63","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9560:26:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrder_$421","typeString":"type(contract ICowConditionalOrder)"}},"id":13946,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9587:11:63","memberName":"interfaceId","nodeType":"MemberAccess","src":"9560:38:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9545:53:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":13953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13948,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13929,"src":"9614:11:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":13950,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":457,"src":"9634:29:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$457_$","typeString":"type(contract ICowConditionalOrderGenerator)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$457_$","typeString":"type(contract ICowConditionalOrderGenerator)"}],"id":13949,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9629:4:63","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9629:35:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrderGenerator_$457","typeString":"type(contract ICowConditionalOrderGenerator)"}},"id":13952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9665:11:63","memberName":"interfaceId","nodeType":"MemberAccess","src":"9629:47:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9614:62:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9545:131:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":13960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13955,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13929,"src":"9692:11:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":13957,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"9712:8:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1271_$8732_$","typeString":"type(contract IERC1271)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC1271_$8732_$","typeString":"type(contract IERC1271)"}],"id":13956,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9707:4:63","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9707:14:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC1271_$8732","typeString":"type(contract IERC1271)"}},"id":13959,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9722:11:63","memberName":"interfaceId","nodeType":"MemberAccess","src":"9707:26:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9692:41:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9545:188:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":13967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13962,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13929,"src":"9749:11:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":13964,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10271,"src":"9769:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$10271_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$10271_$","typeString":"type(contract IERC165)"}],"id":13963,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9764:4:63","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9764:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$10271","typeString":"type(contract IERC165)"}},"id":13966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9778:11:63","memberName":"interfaceId","nodeType":"MemberAccess","src":"9764:25:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"9749:40:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9545:244:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13933,"id":13969,"nodeType":"Return","src":"9526:263:63"}]},"documentation":{"id":13927,"nodeType":"StructuredDocumentation","src":"9190:23:63","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":13971,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"9227:17:63","nodeType":"FunctionDefinition","parameters":{"id":13930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13929,"mutability":"mutable","name":"interfaceId","nameLocation":"9252:11:63","nodeType":"VariableDeclaration","scope":13971,"src":"9245:18:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":13928,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9245:6:63","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9244:20:63"},"returnParameters":{"id":13933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13971,"src":"9286:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13931,"name":"bool","nodeType":"ElementaryTypeName","src":"9286:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9285:6:63"},"scope":14155,"src":"9218:578:63","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":14022,"nodeType":"Block","src":"10090:753:63","statements":[{"assignments":[13982],"declarations":[{"constant":false,"id":13982,"mutability":"mutable","name":"shortOrder","nameLocation":"10118:10:63","nodeType":"VariableDeclaration","scope":14022,"src":"10100:28:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":13981,"nodeType":"UserDefinedTypeName","pathNode":{"id":13980,"name":"ShortOrder","nameLocations":["10100:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":13358,"src":"10100:10:63"},"referencedDeclaration":13358,"src":"10100:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":13986,"initialValue":{"baseExpression":{"id":13983,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"10131:7:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":13985,"indexExpression":{"id":13984,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13974,"src":"10139:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10131:16:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10100:47:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":13990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13987,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13982,"src":"10162:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":13988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10173:8:63","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":13357,"src":"10162:19:63","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10185:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10162:24:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13996,"nodeType":"IfStatement","src":"10158:99:63","trueBody":{"id":13995,"nodeType":"Block","src":"10188:69:63","statements":[{"errorCall":{"arguments":[{"hexValue":"4f7264657220646f6573206e6f74206578697374","id":13992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10223:22:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""},"value":"Order does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""}],"id":13991,"name":"OrderNotValid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"10209:13:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":13993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10209:37:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13994,"nodeType":"RevertStatement","src":"10202:44:63"}]}},{"expression":{"arguments":[{"id":13998,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13974,"src":"10325:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"expression":{"id":13999,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13982,"src":"10360:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":14000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10371:8:63","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":13351,"src":"10360:19:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"expression":{"id":14001,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13982,"src":"10407:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":14002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10418:8:63","memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":13353,"src":"10407:19:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":14007,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10482:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}],"id":14006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14005,"name":"address","nodeType":"ElementaryTypeName","src":"10474:7:63","typeDescriptions":{}}},"id":14008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14003,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13974,"src":"10456:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":14004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10464:9:63","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"10456:17:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10456:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14010,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13982,"src":"10517:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":14011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10528:12:63","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":13355,"src":"10517:23:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14012,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13982,"src":"10567:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":14013,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10578:8:63","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":13357,"src":"10567:19:63","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":14014,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13378,"src":"10613:7:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"30","id":14015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10649:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":14016,"name":"_sellKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13366,"src":"10674:9:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":14017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10720:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":14018,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"10760:13:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14019,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13371,"src":"10808:13:63","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":13997,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":360,"src":"10286:9:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$360_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},"id":14020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["10314:9:63","10350:8:63","10397:8:63","10444:10:63","10506:9:63","10558:7:63","10604:7:63","10638:9:63","10668:4:63","10701:17:63","10742:16:63","10791:15:63"],"names":["sellToken","buyToken","receiver","sellAmount","buyAmount","validTo","appData","feeAmount","kind","partiallyFillable","sellTokenBalance","buyTokenBalance"],"nodeType":"FunctionCall","src":"10286:550:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":13979,"id":14021,"nodeType":"Return","src":"10267:569:63"}]},"id":14023,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrder","nameLocation":"10024:9:63","nodeType":"FunctionDefinition","parameters":{"id":13975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13974,"mutability":"mutable","name":"tokenIn","nameLocation":"10041:7:63","nodeType":"VariableDeclaration","scope":14023,"src":"10034:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":13973,"nodeType":"UserDefinedTypeName","pathNode":{"id":13972,"name":"IERC20","nameLocations":["10034:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"10034:6:63"},"referencedDeclaration":9632,"src":"10034:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10033:16:63"},"returnParameters":{"id":13979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14023,"src":"10072:16:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":13977,"nodeType":"UserDefinedTypeName","pathNode":{"id":13976,"name":"GPv2Order","nameLocations":["10072:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":360,"src":"10072:9:63"},"referencedDeclaration":360,"src":"10072:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$360_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"10071:18:63"},"scope":14155,"src":"10015:828:63","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":14092,"nodeType":"Block","src":"10944:498:63","statements":[{"assignments":[14036],"declarations":[{"constant":false,"id":14036,"mutability":"mutable","name":"shortOrder","nameLocation":"10973:10:63","nodeType":"VariableDeclaration","scope":14092,"src":"10954:29:63","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":14035,"nodeType":"UserDefinedTypeName","pathNode":{"id":14034,"name":"ShortOrder","nameLocations":["10954:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":13358,"src":"10954:10:63"},"referencedDeclaration":13358,"src":"10954:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":14040,"initialValue":{"baseExpression":{"id":14037,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13384,"src":"10986:7:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$9632_$_t_struct$_ShortOrder_$13358_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":14039,"indexExpression":{"id":14038,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14026,"src":"10994:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10986:16:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10954:48:63"},{"assignments":[14042],"declarations":[{"constant":false,"id":14042,"mutability":"mutable","name":"deadline","nameLocation":"11021:8:63","nodeType":"VariableDeclaration","scope":14092,"src":"11013:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14041,"name":"uint256","nodeType":"ElementaryTypeName","src":"11013:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14045,"initialValue":{"expression":{"id":14043,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"11032:10:63","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$13358_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder storage pointer"}},"id":14044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11043:8:63","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":13357,"src":"11032:19:63","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"11013:38:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14046,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14042,"src":"11066:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11078:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11066:13:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14055,"nodeType":"IfStatement","src":"11062:79:63","trueBody":{"id":14054,"nodeType":"Block","src":"11081:60:63","statements":[{"expression":{"components":[{"expression":{"id":14049,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"11103:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":14050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11115:11:63","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":479,"src":"11103:23:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"hexValue":"30","id":14051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11128:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":14052,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11102:28:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_rational_0_by_1_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,int_const 0)"}},"functionReturnParameters":14033,"id":14053,"nodeType":"Return","src":"11095:35:63"}]}},{"assignments":[14057],"declarations":[{"constant":false,"id":14057,"mutability":"mutable","name":"balance","nameLocation":"11159:7:63","nodeType":"VariableDeclaration","scope":14092,"src":"11151:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14056,"name":"uint256","nodeType":"ElementaryTypeName","src":"11151:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14065,"initialValue":{"arguments":[{"arguments":[{"id":14062,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11195:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}],"id":14061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11187:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14060,"name":"address","nodeType":"ElementaryTypeName","src":"11187:7:63","typeDescriptions":{}}},"id":14063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11187:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14058,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14026,"src":"11169:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":14059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11177:9:63","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"11169:17:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11169:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11151:50:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14066,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14057,"src":"11215:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11226:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11215:12:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14075,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"11300:5:63","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":14076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11306:9:63","memberName":"timestamp","nodeType":"MemberAccess","src":"11300:15:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14077,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14042,"src":"11318:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11300:26:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14085,"nodeType":"IfStatement","src":"11296:93:63","trueBody":{"id":14084,"nodeType":"Block","src":"11328:61:63","statements":[{"expression":{"components":[{"expression":{"id":14079,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"11350:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":14080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11362:6:63","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":482,"src":"11350:18:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":14081,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14057,"src":"11370:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14082,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11349:29:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":14033,"id":14083,"nodeType":"Return","src":"11342:36:63"}]}},"id":14086,"nodeType":"IfStatement","src":"11211:178:63","trueBody":{"id":14074,"nodeType":"Block","src":"11229:61:63","statements":[{"expression":{"components":[{"expression":{"id":14069,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"11251:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":14070,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11263:6:63","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":481,"src":"11251:18:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":14071,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14057,"src":"11271:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14072,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11250:29:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":14033,"id":14073,"nodeType":"Return","src":"11243:36:63"}]}},{"expression":{"components":[{"expression":{"id":14087,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"11407:11:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$483_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":14088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11419:6:63","memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":480,"src":"11407:18:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":14089,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14057,"src":"11427:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14090,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11406:29:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$483_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":14033,"id":14091,"nodeType":"Return","src":"11399:36:63"}]},"id":14093,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"10858:25:63","nodeType":"FunctionDefinition","parameters":{"id":14027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14026,"mutability":"mutable","name":"tokenIn","nameLocation":"10891:7:63","nodeType":"VariableDeclaration","scope":14093,"src":"10884:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":14025,"nodeType":"UserDefinedTypeName","pathNode":{"id":14024,"name":"IERC20","nameLocations":["10884:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"10884:6:63"},"referencedDeclaration":9632,"src":"10884:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10883:16:63"},"returnParameters":{"id":14033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14093,"src":"10922:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":14029,"nodeType":"UserDefinedTypeName","pathNode":{"id":14028,"name":"OrderStatus","nameLocations":["10922:11:63"],"nodeType":"IdentifierPath","referencedDeclaration":483,"src":"10922:11:63"},"referencedDeclaration":483,"src":"10922:11:63","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$483","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":14032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14093,"src":"10935:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14031,"name":"uint256","nodeType":"ElementaryTypeName","src":"10935:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10921:22:63"},"scope":14155,"src":"10849:593:63","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":14108,"nodeType":"Block","src":"11503:129:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14098,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"11517:5:63","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":14099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11523:9:63","memberName":"timestamp","nodeType":"MemberAccess","src":"11517:15:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14100,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14095,"src":"11535:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11517:26:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14107,"nodeType":"IfStatement","src":"11513:113:63","trueBody":{"id":14106,"nodeType":"Block","src":"11545:81:63","statements":[{"errorCall":{"arguments":[{"hexValue":"446561646c696e6520697320696e207468652070617374","id":14103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11589:25:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""},"value":"Deadline is in the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""}],"id":14102,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":510,"src":"11566:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":14104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11566:49:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14105,"nodeType":"RevertStatement","src":"11559:56:63"}]}}]},"id":14109,"implemented":true,"kind":"function","modifiers":[],"name":"_checkDeadline","nameLocation":"11457:14:63","nodeType":"FunctionDefinition","parameters":{"id":14096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14095,"mutability":"mutable","name":"deadline","nameLocation":"11480:8:63","nodeType":"VariableDeclaration","scope":14109,"src":"11472:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14094,"name":"uint256","nodeType":"ElementaryTypeName","src":"11472:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11471:18:63"},"returnParameters":{"id":14097,"nodeType":"ParameterList","parameters":[],"src":"11503:0:63"},"scope":14155,"src":"11448:184:63","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":14123,"nodeType":"Block","src":"11701:119:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14114,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14111,"src":"11715:12:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":14115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11731:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11715:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14122,"nodeType":"IfStatement","src":"11711:103:63","trueBody":{"id":14121,"nodeType":"Block","src":"11734:80:63","statements":[{"errorCall":{"arguments":[{"hexValue":"4d696e20616d6f756e74206f7574206973207a65726f","id":14118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11778:24:63","typeDescriptions":{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""},"value":"Min amount out is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""}],"id":14117,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":510,"src":"11755:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":14119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11755:48:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14120,"nodeType":"RevertStatement","src":"11748:55:63"}]}}]},"id":14124,"implemented":true,"kind":"function","modifiers":[],"name":"_checkMinAmountOut","nameLocation":"11647:18:63","nodeType":"FunctionDefinition","parameters":{"id":14112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14111,"mutability":"mutable","name":"minAmountOut","nameLocation":"11674:12:63","nodeType":"VariableDeclaration","scope":14124,"src":"11666:20:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14110,"name":"uint256","nodeType":"ElementaryTypeName","src":"11666:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11665:22:63"},"returnParameters":{"id":14113,"nodeType":"ParameterList","parameters":[],"src":"11701:0:63"},"scope":14155,"src":"11638:182:63","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":14153,"nodeType":"Block","src":"11875:283:63","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":14138,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12019:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$14155","typeString":"contract CowSwapFeeBurner"}],"id":14137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12011:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14136,"name":"address","nodeType":"ElementaryTypeName","src":"12011:7:63","typeDescriptions":{}}},"id":14139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12011:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14135,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"11990:20:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$421_$","typeString":"type(contract ICowConditionalOrder)"}},"id":14140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11990:35:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$421","typeString":"contract ICowConditionalOrder"}},{"arguments":[{"hexValue":"30","id":14143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12057:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12049:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":14141,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12049:7:63","typeDescriptions":{}}},"id":14144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12049:10:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":14147,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14127,"src":"12100:7:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"expression":{"id":14145,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12089:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12093:6:63","memberName":"encode","nodeType":"MemberAccess","src":"12089:10:63","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12089:19:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ICowConditionalOrder_$421","typeString":"contract ICowConditionalOrder"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14133,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":421,"src":"11919:20:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$421_$","typeString":"type(contract ICowConditionalOrder)"}},"id":14134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11940:22:63","memberName":"ConditionalOrderParams","nodeType":"MemberAccess","referencedDeclaration":370,"src":"11919:43:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ConditionalOrderParams_$370_storage_ptr_$","typeString":"type(struct ICowConditionalOrder.ConditionalOrderParams storage pointer)"}},"id":14149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["11981:7:63","12043:4:63","12077:10:63"],"names":["handler","salt","staticData"],"nodeType":"FunctionCall","src":"11919:204:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"}},{"hexValue":"74727565","id":14150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12137:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ConditionalOrderParams_$370_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14130,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13374,"src":"11885:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"id":14132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11899:6:63","memberName":"create","nodeType":"MemberAccess","referencedDeclaration":303,"src":"11885:20:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_ConditionalOrderParams_$370_memory_ptr_$_t_bool_$returns$__$","typeString":"function (struct ICowConditionalOrder.ConditionalOrderParams memory,bool) external"}},"id":14151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11885:266:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14152,"nodeType":"ExpressionStatement","src":"11885:266:63"}]},"id":14154,"implemented":true,"kind":"function","modifiers":[],"name":"_createCowOrder","nameLocation":"11835:15:63","nodeType":"FunctionDefinition","parameters":{"id":14128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14127,"mutability":"mutable","name":"tokenIn","nameLocation":"11858:7:63","nodeType":"VariableDeclaration","scope":14154,"src":"11851:14:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":14126,"nodeType":"UserDefinedTypeName","pathNode":{"id":14125,"name":"IERC20","nameLocations":["11851:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"11851:6:63"},"referencedDeclaration":9632,"src":"11851:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"11850:16:63"},"returnParameters":{"id":14129,"nodeType":"ParameterList","parameters":[],"src":"11875:0:63"},"scope":14155,"src":"11826:332:63","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":14156,"src":"1726:10434:63","usedErrors":[72,375,380,387,394,399,510,516,519,694,697,6290,6689,9711,9992,9997,10000],"usedEvents":[439,495,505,684]}],"src":"46:12115:63"},"id":63},"contracts/ERC4626CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/ERC4626CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[14155],"ERC4626CowSwapFeeBurner":[14352],"IComposableCow":[329],"IERC20":[9632],"IERC4626":[8902],"IProtocolFeeSweeper":[907],"IVault":[2319],"ReentrancyGuardTransient":[6346],"SafeERC20":[9984]},"id":14353,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14157,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:64"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":14159,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":8903,"src":"72:75:64","symbolAliases":[{"foreign":{"id":14158,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"81:8:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":14161,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":9985,"src":"148:84:64","symbolAliases":[{"foreign":{"id":14160,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"157:9:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":14163,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":9633,"src":"233:72:64","symbolAliases":[{"foreign":{"id":14162,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"242:6:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":14165,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":330,"src":"307:108:64","symbolAliases":[{"foreign":{"id":14164,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":329,"src":"316:14:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":14167,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":908,"src":"416:118:64","symbolAliases":[{"foreign":{"id":14166,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":907,"src":"425:19:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":2320,"src":"535:81:64","symbolAliases":[{"foreign":{"id":14168,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"544:6:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":14171,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":6347,"src":"618:132:64","symbolAliases":[{"foreign":{"id":14170,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"631:24:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CowSwapFeeBurner.sol","file":"./CowSwapFeeBurner.sol","id":14173,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14353,"sourceUnit":14156,"src":"752:58:64","symbolAliases":[{"foreign":{"id":14172,"name":"CowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14155,"src":"761:16:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14175,"name":"CowSwapFeeBurner","nameLocations":["1172:16:64"],"nodeType":"IdentifierPath","referencedDeclaration":14155,"src":"1172:16:64"},"id":14176,"nodeType":"InheritanceSpecifier","src":"1172:16:64"}],"canonicalName":"ERC4626CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":14174,"nodeType":"StructuredDocumentation","src":"812:323:64","text":" @title ERC4626CowSwapFeeBurner\n @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":14352,"linearizedBaseContracts":[14352,14155,4622,101,6346,8623,6869,4159,81,569,457,10271,421,718,8732],"name":"ERC4626CowSwapFeeBurner","nameLocation":"1145:23:64","nodeType":"ContractDefinition","nodes":[{"errorSelector":"932c92a5","id":14178,"name":"InvalidProtocolFeeSweeper","nameLocation":"1201:25:64","nodeType":"ErrorDefinition","parameters":{"id":14177,"nodeType":"ParameterList","parameters":[],"src":"1226:2:64"},"src":"1195:34:64"},{"global":false,"id":14182,"libraryName":{"id":14179,"name":"SafeERC20","nameLocations":["1241:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":9984,"src":"1241:9:64"},"nodeType":"UsingForDirective","src":"1235:27:64","typeName":{"id":14181,"nodeType":"UserDefinedTypeName","pathNode":{"id":14180,"name":"IERC20","nameLocations":["1255:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1255:6:64"},"referencedDeclaration":9632,"src":"1255:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}},{"constant":false,"functionSelector":"178ac96e","id":14185,"mutability":"immutable","name":"protocolFeeSweeper","nameLocation":"1305:18:64","nodeType":"VariableDeclaration","scope":14352,"src":"1268:55:64","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":14184,"nodeType":"UserDefinedTypeName","pathNode":{"id":14183,"name":"IProtocolFeeSweeper","nameLocations":["1268:19:64"],"nodeType":"IdentifierPath","referencedDeclaration":907,"src":"1268:19:64"},"referencedDeclaration":907,"src":"1268:19:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}},"visibility":"public"},{"body":{"id":14200,"nodeType":"Block","src":"1364:124:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14187,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1378:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1382:6:64","memberName":"sender","nodeType":"MemberAccess","src":"1378:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":14191,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14185,"src":"1400:18:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}],"id":14190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1392:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14189,"name":"address","nodeType":"ElementaryTypeName","src":"1392:7:64","typeDescriptions":{}}},"id":14192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:27:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1378:41:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14198,"nodeType":"IfStatement","src":"1374:97:64","trueBody":{"id":14197,"nodeType":"Block","src":"1421:50:64","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14194,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"1442:16:64","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:18:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14196,"nodeType":"RevertStatement","src":"1435:25:64"}]}},{"id":14199,"nodeType":"PlaceholderStatement","src":"1480:1:64"}]},"id":14201,"name":"onlyProtocolFeeSweeper","nameLocation":"1339:22:64","nodeType":"ModifierDefinition","parameters":{"id":14186,"nodeType":"ParameterList","parameters":[],"src":"1361:2:64"},"src":"1330:158:64","virtual":false,"visibility":"internal"},{"body":{"id":14244,"nodeType":"Block","src":"1778:174:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14228,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14204,"src":"1800:19:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}],"id":14227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1792:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14226,"name":"address","nodeType":"ElementaryTypeName","src":"1792:7:64","typeDescriptions":{}}},"id":14229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1792:28:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":14232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1832:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1824:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14230,"name":"address","nodeType":"ElementaryTypeName","src":"1824:7:64","typeDescriptions":{}}},"id":14233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1824:10:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1792:42:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14239,"nodeType":"IfStatement","src":"1788:107:64","trueBody":{"id":14238,"nodeType":"Block","src":"1836:59:64","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14235,"name":"InvalidProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14178,"src":"1857:25:64","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1857:27:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14237,"nodeType":"RevertStatement","src":"1850:34:64"}]}},{"expression":{"id":14242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14240,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14185,"src":"1905:18:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14241,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14204,"src":"1926:19:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}},"src":"1905:40:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}},"id":14243,"nodeType":"ExpressionStatement","src":"1905:40:64"}]},"id":14245,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":14219,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14207,"src":"1724:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},{"id":14220,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14210,"src":"1731:13:64","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},{"id":14221,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"1746:12:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14222,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14214,"src":"1760:7:64","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":14223,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14216,"src":"1769:7:64","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":14224,"kind":"baseConstructorSpecifier","modifierName":{"id":14218,"name":"CowSwapFeeBurner","nameLocations":["1707:16:64"],"nodeType":"IdentifierPath","referencedDeclaration":14155,"src":"1707:16:64"},"nodeType":"ModifierInvocation","src":"1707:70:64"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14204,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1535:19:64","nodeType":"VariableDeclaration","scope":14245,"src":"1515:39:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":14203,"nodeType":"UserDefinedTypeName","pathNode":{"id":14202,"name":"IProtocolFeeSweeper","nameLocations":["1515:19:64"],"nodeType":"IdentifierPath","referencedDeclaration":907,"src":"1515:19:64"},"referencedDeclaration":907,"src":"1515:19:64","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$907","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":14207,"mutability":"mutable","name":"vault","nameLocation":"1571:5:64","nodeType":"VariableDeclaration","scope":14245,"src":"1564:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":14206,"nodeType":"UserDefinedTypeName","pathNode":{"id":14205,"name":"IVault","nameLocations":["1564:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1564:6:64"},"referencedDeclaration":2319,"src":"1564:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":14210,"mutability":"mutable","name":"composableCow","nameLocation":"1601:13:64","nodeType":"VariableDeclaration","scope":14245,"src":"1586:28:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"},"typeName":{"id":14209,"nodeType":"UserDefinedTypeName","pathNode":{"id":14208,"name":"IComposableCow","nameLocations":["1586:14:64"],"nodeType":"IdentifierPath","referencedDeclaration":329,"src":"1586:14:64"},"referencedDeclaration":329,"src":"1586:14:64","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$329","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":14212,"mutability":"mutable","name":"vaultRelayer","nameLocation":"1632:12:64","nodeType":"VariableDeclaration","scope":14245,"src":"1624:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14211,"name":"address","nodeType":"ElementaryTypeName","src":"1624:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14214,"mutability":"mutable","name":"appData","nameLocation":"1662:7:64","nodeType":"VariableDeclaration","scope":14245,"src":"1654:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14213,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1654:7:64","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14216,"mutability":"mutable","name":"version","nameLocation":"1693:7:64","nodeType":"VariableDeclaration","scope":14245,"src":"1679:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14215,"name":"string","nodeType":"ElementaryTypeName","src":"1679:6:64","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1505:201:64"},"returnParameters":{"id":14225,"nodeType":"ParameterList","parameters":[],"src":"1778:0:64"},"scope":14352,"src":"1494:458:64","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[13654],"body":{"id":14350,"nodeType":"Block","src":"3063:1462:64","statements":[{"expression":{"arguments":[{"expression":{"id":14273,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3247:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3251:6:64","memberName":"sender","nodeType":"MemberAccess","src":"3247:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14277,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3267:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$14352","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$14352","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":14276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3259:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14275,"name":"address","nodeType":"ElementaryTypeName","src":"3259:7:64","typeDescriptions":{}}},"id":14278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3259:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14279,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"3274:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14270,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14251,"src":"3221:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":14272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3230:16:64","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":9771,"src":"3221:25:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":14280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3221:75:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14281,"nodeType":"ExpressionStatement","src":"3221:75:64"},{"assignments":[14284],"declarations":[{"constant":false,"id":14284,"mutability":"mutable","name":"erc4626Token","nameLocation":"3392:12:64","nodeType":"VariableDeclaration","scope":14350,"src":"3383:21:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":14283,"nodeType":"UserDefinedTypeName","pathNode":{"id":14282,"name":"IERC4626","nameLocations":["3383:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"3383:8:64"},"referencedDeclaration":8902,"src":"3383:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":14291,"initialValue":{"arguments":[{"arguments":[{"id":14288,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14251,"src":"3424:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":14287,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3416:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14286,"name":"address","nodeType":"ElementaryTypeName","src":"3416:7:64","typeDescriptions":{}}},"id":14289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3416:17:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14285,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"3407:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$8902_$","typeString":"type(contract IERC4626)"}},"id":14290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3407:27:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"3383:51:64"},{"expression":{"id":14298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14292,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14251,"src":"3444:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14294,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14284,"src":"3462:12:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"id":14295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3475:5:64","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":8771,"src":"3462:18:64","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":14296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:20:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14293,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"3455:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$9632_$","typeString":"type(contract IERC20)"}},"id":14297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3455:28:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"3444:39:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":14299,"nodeType":"ExpressionStatement","src":"3444:39:64"},{"expression":{"id":14313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14300,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"3493:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14303,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"3537:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":14306,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3568:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$14352","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$14352","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":14305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3560:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14304,"name":"address","nodeType":"ElementaryTypeName","src":"3560:7:64","typeDescriptions":{}}},"id":14307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3560:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14310,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3583:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$14352","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$14352","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":14309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3575:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14308,"name":"address","nodeType":"ElementaryTypeName","src":"3575:7:64","typeDescriptions":{}}},"id":14311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3575:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14301,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14284,"src":"3517:12:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"id":14302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3530:6:64","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":8901,"src":"3517:19:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":14312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3517:72:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3493:96:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14314,"nodeType":"ExpressionStatement","src":"3493:96:64"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"id":14317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14315,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14251,"src":"3823:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14316,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14256,"src":"3835:11:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"3823:23:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14348,"nodeType":"Block","src":"4229:290:64","statements":[{"expression":{"arguments":[{"id":14338,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14248,"src":"4266:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14339,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14251,"src":"4288:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":14340,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"4314:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14341,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14256,"src":"4353:11:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":14342,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14258,"src":"4382:23:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14343,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14260,"src":"4423:9:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14344,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14262,"src":"4450:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":14345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4476:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14337,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13773,"src":"4243:5:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":14346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:265:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14347,"nodeType":"ExpressionStatement","src":"4243:265:64"}]},"id":14349,"nodeType":"IfStatement","src":"3819:700:64","trueBody":{"id":14336,"nodeType":"Block","src":"3848:375:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14318,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"3976:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14319,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14258,"src":"4000:23:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3976:47:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14328,"nodeType":"IfStatement","src":"3972:171:64","trueBody":{"id":14327,"nodeType":"Block","src":"4025:118:64","statements":[{"errorCall":{"arguments":[{"id":14322,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14256,"src":"4068:11:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":14323,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"4081:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14324,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14258,"src":"4104:23:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14321,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"4050:17:64","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$9632_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":14325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4050:78:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14326,"nodeType":"RevertStatement","src":"4043:85:64"}]}},{"expression":{"arguments":[{"id":14332,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14260,"src":"4179:9:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14333,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14253,"src":"4190:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14329,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14251,"src":"4157:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":14331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4166:12:64","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"4157:21:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":14334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4157:55:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14335,"nodeType":"ExpressionStatement","src":"4157:55:64"}]}}]},"documentation":{"id":14246,"nodeType":"StructuredDocumentation","src":"1958:818:64","text":" @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n `targetToken`, and sends the proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param minTargetTokenAmountOut The minimum `amountOut` for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":14351,"implemented":true,"kind":"function","modifiers":[{"id":14266,"kind":"modifierInvocation","modifierName":{"id":14265,"name":"onlyProtocolFeeSweeper","nameLocations":["3027:22:64"],"nodeType":"IdentifierPath","referencedDeclaration":14201,"src":"3027:22:64"},"nodeType":"ModifierInvocation","src":"3027:22:64"},{"id":14268,"kind":"modifierInvocation","modifierName":{"id":14267,"name":"nonReentrant","nameLocations":["3050:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":6301,"src":"3050:12:64"},"nodeType":"ModifierInvocation","src":"3050:12:64"}],"name":"burn","nameLocation":"2790:4:64","nodeType":"FunctionDefinition","overrides":{"id":14264,"nodeType":"OverrideSpecifier","overrides":[],"src":"3018:8:64"},"parameters":{"id":14263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14248,"mutability":"mutable","name":"pool","nameLocation":"2812:4:64","nodeType":"VariableDeclaration","scope":14351,"src":"2804:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14247,"name":"address","nodeType":"ElementaryTypeName","src":"2804:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14251,"mutability":"mutable","name":"feeToken","nameLocation":"2833:8:64","nodeType":"VariableDeclaration","scope":14351,"src":"2826:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":14250,"nodeType":"UserDefinedTypeName","pathNode":{"id":14249,"name":"IERC20","nameLocations":["2826:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2826:6:64"},"referencedDeclaration":9632,"src":"2826:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":14253,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2859:21:64","nodeType":"VariableDeclaration","scope":14351,"src":"2851:29:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14252,"name":"uint256","nodeType":"ElementaryTypeName","src":"2851:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14256,"mutability":"mutable","name":"targetToken","nameLocation":"2897:11:64","nodeType":"VariableDeclaration","scope":14351,"src":"2890:18:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":14255,"nodeType":"UserDefinedTypeName","pathNode":{"id":14254,"name":"IERC20","nameLocations":["2890:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2890:6:64"},"referencedDeclaration":9632,"src":"2890:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":14258,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2926:23:64","nodeType":"VariableDeclaration","scope":14351,"src":"2918:31:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14257,"name":"uint256","nodeType":"ElementaryTypeName","src":"2918:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14260,"mutability":"mutable","name":"recipient","nameLocation":"2967:9:64","nodeType":"VariableDeclaration","scope":14351,"src":"2959:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14259,"name":"address","nodeType":"ElementaryTypeName","src":"2959:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14262,"mutability":"mutable","name":"deadline","nameLocation":"2994:8:64","nodeType":"VariableDeclaration","scope":14351,"src":"2986:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14261,"name":"uint256","nodeType":"ElementaryTypeName","src":"2986:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2794:214:64"},"returnParameters":{"id":14269,"nodeType":"ParameterList","parameters":[],"src":"3063:0:64"},"scope":14352,"src":"2781:1744:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":14353,"src":"1136:3391:64","usedErrors":[72,375,380,387,394,399,510,516,519,694,697,6290,6689,9711,9992,9997,10000,14178],"usedEvents":[439,495,505,684]}],"src":"46:4482:64"},"id":64},"contracts/PoolHelperCommon.sol":{"ast":{"absolutePath":"contracts/PoolHelperCommon.sol","exportedSymbols":{"EnumerableSet":[12639],"IPoolHelperCommon":[635],"IVault":[2319],"IVaultErrors":[2976],"PoolHelperCommon":[14620],"SingletonAuthentication":[8623]},"id":14621,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14354,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:65"},{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","id":14355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14621,"sourceUnit":12640,"src":"72:65:65","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","id":14357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14621,"sourceUnit":636,"src":"139:114:65","symbolAliases":[{"foreign":{"id":14356,"name":"IPoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":635,"src":"148:17:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":14359,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14621,"sourceUnit":2977,"src":"254:93:65","symbolAliases":[{"foreign":{"id":14358,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"263:12:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14361,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14621,"sourceUnit":2320,"src":"348:81:65","symbolAliases":[{"foreign":{"id":14360,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"357:6:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":14363,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14621,"sourceUnit":8624,"src":"431:104:65","symbolAliases":[{"foreign":{"id":14362,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"440:23:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":14365,"name":"IPoolHelperCommon","nameLocations":["655:17:65"],"nodeType":"IdentifierPath","referencedDeclaration":635,"src":"655:17:65"},"id":14366,"nodeType":"InheritanceSpecifier","src":"655:17:65"},{"baseName":{"id":14367,"name":"SingletonAuthentication","nameLocations":["674:23:65"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"674:23:65"},"id":14368,"nodeType":"InheritanceSpecifier","src":"674:23:65"}],"canonicalName":"PoolHelperCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":14364,"nodeType":"StructuredDocumentation","src":"537:80:65","text":"@notice Common code for helper functions that operate on a subset of pools."},"fullyImplemented":true,"id":14620,"linearizedBaseContracts":[14620,8623,6869,4159,81,635],"name":"PoolHelperCommon","nameLocation":"635:16:65","nodeType":"ContractDefinition","nodes":[{"global":false,"id":14372,"libraryName":{"id":14369,"name":"EnumerableSet","nameLocations":["710:13:65"],"nodeType":"IdentifierPath","referencedDeclaration":12639,"src":"710:13:65"},"nodeType":"UsingForDirective","src":"704:49:65","typeName":{"id":14371,"nodeType":"UserDefinedTypeName","pathNode":{"id":14370,"name":"EnumerableSet.AddressSet","nameLocations":["728:13:65","742:10:65"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"728:24:65"},"referencedDeclaration":12352,"src":"728:24:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":14375,"mutability":"mutable","name":"_pools","nameLocation":"793:6:65","nodeType":"VariableDeclaration","scope":14620,"src":"759:40:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":14374,"nodeType":"UserDefinedTypeName","pathNode":{"id":14373,"name":"EnumerableSet.AddressSet","nameLocations":["759:13:65","773:10:65"],"nodeType":"IdentifierPath","referencedDeclaration":12352,"src":"759:24:65"},"referencedDeclaration":12352,"src":"759:24:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"body":{"id":14384,"nodeType":"Block","src":"863:64:65","statements":[]},"id":14385,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":14381,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14378,"src":"856:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":14382,"kind":"baseConstructorSpecifier","modifierName":{"id":14380,"name":"SingletonAuthentication","nameLocations":["832:23:65"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"832:23:65"},"nodeType":"ModifierInvocation","src":"832:30:65"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14378,"mutability":"mutable","name":"vault","nameLocation":"825:5:65","nodeType":"VariableDeclaration","scope":14385,"src":"818:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":14377,"nodeType":"UserDefinedTypeName","pathNode":{"id":14376,"name":"IVault","nameLocations":["818:6:65"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"818:6:65"},"referencedDeclaration":2319,"src":"818:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"817:14:65"},"returnParameters":{"id":14383,"nodeType":"ParameterList","parameters":[],"src":"863:0:65"},"scope":14620,"src":"806:121:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[602],"body":{"id":14452,"nodeType":"Block","src":"1252:595:65","statements":[{"assignments":[14395],"declarations":[{"constant":false,"id":14395,"mutability":"mutable","name":"length","nameLocation":"1270:6:65","nodeType":"VariableDeclaration","scope":14452,"src":"1262:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14394,"name":"uint256","nodeType":"ElementaryTypeName","src":"1262:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14398,"initialValue":{"expression":{"id":14396,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14389,"src":"1279:8:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":14397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1288:6:65","memberName":"length","nodeType":"MemberAccess","src":"1279:15:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1262:32:65"},{"body":{"id":14450,"nodeType":"Block","src":"1342:499:65","statements":[{"assignments":[14410],"declarations":[{"constant":false,"id":14410,"mutability":"mutable","name":"pool","nameLocation":"1364:4:65","nodeType":"VariableDeclaration","scope":14450,"src":"1356:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14409,"name":"address","nodeType":"ElementaryTypeName","src":"1356:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14414,"initialValue":{"baseExpression":{"id":14411,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14389,"src":"1371:8:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":14413,"indexExpression":{"id":14412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14400,"src":"1380:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1371:11:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1356:26:65"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14418,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"1480:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14415,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"1452:8:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":14416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1452:10:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":14417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1463:16:65","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3314,"src":"1452:27:65","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":14419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1452:33:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":14420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1489:5:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1452:42:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14429,"nodeType":"IfStatement","src":"1448:124:65","trueBody":{"id":14428,"nodeType":"Block","src":"1496:76:65","statements":[{"errorCall":{"arguments":[{"id":14425,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"1552:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14422,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"1521:12:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$2976_$","typeString":"type(contract IVaultErrors)"}},"id":14424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1534:17:65","memberName":"PoolNotRegistered","nodeType":"MemberAccess","referencedDeclaration":2631,"src":"1521:30:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":14426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1521:36:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14427,"nodeType":"RevertStatement","src":"1514:43:65"}]}},{"expression":{"arguments":[{"id":14431,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"1678:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14430,"name":"_validatePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14619,"src":"1664:13:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":14432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:19:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14433,"nodeType":"ExpressionStatement","src":"1664:19:65"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14436,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"1713:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14434,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"1702:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1709:3:65","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":12379,"src":"1702:10:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$12352_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":14437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1702:16:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":14438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1722:5:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1702:25:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14445,"nodeType":"IfStatement","src":"1698:93:65","trueBody":{"id":14444,"nodeType":"Block","src":"1729:62:65","statements":[{"errorCall":{"arguments":[{"id":14441,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"1771:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14440,"name":"PoolAlreadyInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"1754:16:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":14442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1754:22:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14443,"nodeType":"RevertStatement","src":"1747:29:65"}]}},{"eventCall":{"arguments":[{"id":14447,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"1825:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14446,"name":"PoolAddedToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":577,"src":"1810:14:65","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":14448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1810:20:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14449,"nodeType":"EmitStatement","src":"1805:25:65"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14403,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14400,"src":"1325:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14404,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14395,"src":"1329:6:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1325:10:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14451,"initializationExpression":{"assignments":[14400],"declarations":[{"constant":false,"id":14400,"mutability":"mutable","name":"i","nameLocation":"1318:1:65","nodeType":"VariableDeclaration","scope":14451,"src":"1310:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14399,"name":"uint256","nodeType":"ElementaryTypeName","src":"1310:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14402,"initialValue":{"hexValue":"30","id":14401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1322:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1310:13:65"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1337:3:65","subExpression":{"id":14406,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14400,"src":"1337:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14408,"nodeType":"ExpressionStatement","src":"1337:3:65"},"nodeType":"ForStatement","src":"1305:536:65"}]},"documentation":{"id":14386,"nodeType":"StructuredDocumentation","src":"1145:33:65","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"b36a4ab1","id":14453,"implemented":true,"kind":"function","modifiers":[{"id":14392,"kind":"modifierInvocation","modifierName":{"id":14391,"name":"authenticate","nameLocations":["1239:12:65"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"1239:12:65"},"nodeType":"ModifierInvocation","src":"1239:12:65"}],"name":"addPools","nameLocation":"1192:8:65","nodeType":"FunctionDefinition","parameters":{"id":14390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14389,"mutability":"mutable","name":"newPools","nameLocation":"1220:8:65","nodeType":"VariableDeclaration","scope":14453,"src":"1201:27:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":14387,"name":"address","nodeType":"ElementaryTypeName","src":"1201:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14388,"nodeType":"ArrayTypeName","src":"1201:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1200:29:65"},"returnParameters":{"id":14393,"nodeType":"ParameterList","parameters":[],"src":"1252:0:65"},"scope":14620,"src":"1183:664:65","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[609],"body":{"id":14501,"nodeType":"Block","src":"1956:289:65","statements":[{"assignments":[14463],"declarations":[{"constant":false,"id":14463,"mutability":"mutable","name":"length","nameLocation":"1974:6:65","nodeType":"VariableDeclaration","scope":14501,"src":"1966:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14462,"name":"uint256","nodeType":"ElementaryTypeName","src":"1966:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14466,"initialValue":{"expression":{"id":14464,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14457,"src":"1983:5:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1989:6:65","memberName":"length","nodeType":"MemberAccess","src":"1983:12:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1966:29:65"},{"body":{"id":14499,"nodeType":"Block","src":"2042:197:65","statements":[{"assignments":[14478],"declarations":[{"constant":false,"id":14478,"mutability":"mutable","name":"pool","nameLocation":"2064:4:65","nodeType":"VariableDeclaration","scope":14499,"src":"2056:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14477,"name":"address","nodeType":"ElementaryTypeName","src":"2056:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14482,"initialValue":{"baseExpression":{"id":14479,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14457,"src":"2071:5:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14481,"indexExpression":{"id":14480,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14468,"src":"2077:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2071:8:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2056:23:65"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14485,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14478,"src":"2111:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14483,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"2097:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2104:6:65","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":12406,"src":"2097:13:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$12352_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":14486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2097:19:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":14487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2120:5:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2097:28:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14494,"nodeType":"IfStatement","src":"2093:92:65","trueBody":{"id":14493,"nodeType":"Block","src":"2127:58:65","statements":[{"errorCall":{"arguments":[{"id":14490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14478,"src":"2165:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14489,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"2152:12:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":14491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2152:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14492,"nodeType":"RevertStatement","src":"2145:25:65"}]}},{"eventCall":{"arguments":[{"id":14496,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14478,"src":"2223:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14495,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"2204:18:65","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":14497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2204:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14498,"nodeType":"EmitStatement","src":"2199:29:65"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14471,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14468,"src":"2025:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14472,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14463,"src":"2029:6:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2025:10:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14500,"initializationExpression":{"assignments":[14468],"declarations":[{"constant":false,"id":14468,"mutability":"mutable","name":"i","nameLocation":"2018:1:65","nodeType":"VariableDeclaration","scope":14500,"src":"2010:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14467,"name":"uint256","nodeType":"ElementaryTypeName","src":"2010:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14470,"initialValue":{"hexValue":"30","id":14469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2022:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2010:13:65"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2037:3:65","subExpression":{"id":14474,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14468,"src":"2037:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14476,"nodeType":"ExpressionStatement","src":"2037:3:65"},"nodeType":"ForStatement","src":"2005:234:65"}]},"documentation":{"id":14454,"nodeType":"StructuredDocumentation","src":"1853:33:65","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"4b164140","id":14502,"implemented":true,"kind":"function","modifiers":[{"id":14460,"kind":"modifierInvocation","modifierName":{"id":14459,"name":"authenticate","nameLocations":["1943:12:65"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"1943:12:65"},"nodeType":"ModifierInvocation","src":"1943:12:65"}],"name":"removePools","nameLocation":"1900:11:65","nodeType":"FunctionDefinition","parameters":{"id":14458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14457,"mutability":"mutable","name":"pools","nameLocation":"1929:5:65","nodeType":"VariableDeclaration","scope":14502,"src":"1912:22:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":14455,"name":"address","nodeType":"ElementaryTypeName","src":"1912:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14456,"nodeType":"ArrayTypeName","src":"1912:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1911:24:65"},"returnParameters":{"id":14461,"nodeType":"ParameterList","parameters":[],"src":"1956:0:65"},"scope":14620,"src":"1891:354:65","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[615],"body":{"id":14512,"nodeType":"Block","src":"2584:39:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14508,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"2601:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2608:6:65","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":12448,"src":"2601:13:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$12352_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":14510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2601:15:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14507,"id":14511,"nodeType":"Return","src":"2594:22:65"}]},"documentation":{"id":14503,"nodeType":"StructuredDocumentation","src":"2490:33:65","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"8eec5d70","id":14513,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"2537:12:65","nodeType":"FunctionDefinition","parameters":{"id":14504,"nodeType":"ParameterList","parameters":[],"src":"2549:2:65"},"returnParameters":{"id":14507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14513,"src":"2575:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14505,"name":"uint256","nodeType":"ElementaryTypeName","src":"2575:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2574:9:65"},"scope":14620,"src":"2528:95:65","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[623],"body":{"id":14526,"nodeType":"Block","src":"2727:45:65","statements":[{"expression":{"arguments":[{"id":14523,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14516,"src":"2760:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14521,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"2744:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2751:8:65","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":12433,"src":"2744:15:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$12352_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":14524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2744:21:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14520,"id":14525,"nodeType":"Return","src":"2737:28:65"}]},"documentation":{"id":14514,"nodeType":"StructuredDocumentation","src":"2629:33:65","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"1246dbf5","id":14527,"implemented":true,"kind":"function","modifiers":[],"name":"hasPool","nameLocation":"2676:7:65","nodeType":"FunctionDefinition","parameters":{"id":14517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14516,"mutability":"mutable","name":"pool","nameLocation":"2692:4:65","nodeType":"VariableDeclaration","scope":14527,"src":"2684:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14515,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2683:14:65"},"returnParameters":{"id":14520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14519,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14527,"src":"2721:4:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14518,"name":"bool","nodeType":"ElementaryTypeName","src":"2721:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2720:6:65"},"scope":14620,"src":"2667:105:65","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[634],"body":{"id":14593,"nodeType":"Block","src":"2905:311:65","statements":[{"assignments":[14539],"declarations":[{"constant":false,"id":14539,"mutability":"mutable","name":"poolLength","nameLocation":"2923:10:65","nodeType":"VariableDeclaration","scope":14593,"src":"2915:18:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14538,"name":"uint256","nodeType":"ElementaryTypeName","src":"2915:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14543,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14540,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"2936:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2943:6:65","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":12448,"src":"2936:13:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$12352_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":14542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2936:15:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2915:36:65"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14544,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14530,"src":"2965:4:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14545,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14532,"src":"2972:2:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2965:9:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14547,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14532,"src":"2978:2:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14548,"name":"poolLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14539,"src":"2983:10:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2978:15:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2965:28:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14551,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14530,"src":"2997:4:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":14552,"name":"poolLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14539,"src":"3005:10:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2997:18:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2965:50:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14559,"nodeType":"IfStatement","src":"2961:106:65","trueBody":{"id":14558,"nodeType":"Block","src":"3017:50:65","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14555,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"3038:16:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3038:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14557,"nodeType":"RevertStatement","src":"3031:25:65"}]}},{"expression":{"id":14568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14560,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14536,"src":"3077:5:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14564,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14532,"src":"3099:2:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14565,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14530,"src":"3104:4:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3099:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3085:13:65","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":14561,"name":"address","nodeType":"ElementaryTypeName","src":"3089:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14562,"nodeType":"ArrayTypeName","src":"3089:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":14567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3085:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"3077:32:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14569,"nodeType":"ExpressionStatement","src":"3077:32:65"},{"body":{"id":14591,"nodeType":"Block","src":"3155:55:65","statements":[{"expression":{"id":14589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14580,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14536,"src":"3169:5:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14584,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14571,"src":"3175:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14582,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14530,"src":"3179:4:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3175:8:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3169:15:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14587,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14571,"src":"3197:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14585,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"3187:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3194:2:65","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"3187:9:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$12352_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":14588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3187:12:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3169:30:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14590,"nodeType":"ExpressionStatement","src":"3169:30:65"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14574,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14571,"src":"3142:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14575,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14532,"src":"3146:2:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3142:6:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14592,"initializationExpression":{"assignments":[14571],"declarations":[{"constant":false,"id":14571,"mutability":"mutable","name":"i","nameLocation":"3132:1:65","nodeType":"VariableDeclaration","scope":14592,"src":"3124:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14570,"name":"uint256","nodeType":"ElementaryTypeName","src":"3124:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14573,"initialValue":{"id":14572,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14530,"src":"3136:4:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3124:16:65"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3150:3:65","subExpression":{"id":14577,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14571,"src":"3150:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14579,"nodeType":"ExpressionStatement","src":"3150:3:65"},"nodeType":"ForStatement","src":"3119:91:65"}]},"documentation":{"id":14528,"nodeType":"StructuredDocumentation","src":"2778:33:65","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"bbe95837","id":14594,"implemented":true,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2825:8:65","nodeType":"FunctionDefinition","parameters":{"id":14533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14530,"mutability":"mutable","name":"from","nameLocation":"2842:4:65","nodeType":"VariableDeclaration","scope":14594,"src":"2834:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14529,"name":"uint256","nodeType":"ElementaryTypeName","src":"2834:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14532,"mutability":"mutable","name":"to","nameLocation":"2856:2:65","nodeType":"VariableDeclaration","scope":14594,"src":"2848:10:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14531,"name":"uint256","nodeType":"ElementaryTypeName","src":"2848:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2833:26:65"},"returnParameters":{"id":14537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14536,"mutability":"mutable","name":"pools","nameLocation":"2898:5:65","nodeType":"VariableDeclaration","scope":14594,"src":"2881:22:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":14534,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14535,"nodeType":"ArrayTypeName","src":"2881:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2880:24:65"},"scope":14620,"src":"2816:400:65","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":14611,"nodeType":"Block","src":"3522:102:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14601,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14596,"src":"3552:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14599,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14375,"src":"3536:6:65","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$12352_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":14600,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3543:8:65","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":12433,"src":"3536:15:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$12352_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$12352_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":14602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3536:21:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":14603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3561:5:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3536:30:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14610,"nodeType":"IfStatement","src":"3532:86:65","trueBody":{"id":14609,"nodeType":"Block","src":"3568:50:65","statements":[{"errorCall":{"arguments":[{"id":14606,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14596,"src":"3602:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14605,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"3589:12:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":14607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3589:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14608,"nodeType":"RevertStatement","src":"3582:25:65"}]}}]},"id":14612,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolAdded","nameLocation":"3477:16:65","nodeType":"FunctionDefinition","parameters":{"id":14597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14596,"mutability":"mutable","name":"pool","nameLocation":"3502:4:65","nodeType":"VariableDeclaration","scope":14612,"src":"3494:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14595,"name":"address","nodeType":"ElementaryTypeName","src":"3494:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3493:14:65"},"returnParameters":{"id":14598,"nodeType":"ParameterList","parameters":[],"src":"3522:0:65"},"scope":14620,"src":"3468:156:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14618,"nodeType":"Block","src":"3766:64:65","statements":[]},"documentation":{"id":14613,"nodeType":"StructuredDocumentation","src":"3630:72:65","text":"@dev Optional function called in addPools for additional validation."},"id":14619,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"3716:13:65","nodeType":"FunctionDefinition","parameters":{"id":14616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14615,"mutability":"mutable","name":"pool","nameLocation":"3738:4:65","nodeType":"VariableDeclaration","scope":14619,"src":"3730:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14614,"name":"address","nodeType":"ElementaryTypeName","src":"3730:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3729:14:65"},"returnParameters":{"id":14617,"nodeType":"ParameterList","parameters":[],"src":"3766:0:65"},"scope":14620,"src":"3707:123:65","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":14621,"src":"617:3215:65","usedErrors":[72,587,592,595,2631,6689],"usedEvents":[577,582]}],"src":"46:3787:65"},"id":65},"contracts/PoolPauseHelper.sol":{"ast":{"absolutePath":"contracts/PoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[646],"IVault":[2319],"PoolHelperCommon":[14620],"PoolPauseHelper":[14686]},"id":14687,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14622,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:66"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","id":14624,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14687,"sourceUnit":647,"src":"72:112:66","symbolAliases":[{"foreign":{"id":14623,"name":"IPoolPauseHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":646,"src":"81:16:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14626,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14687,"sourceUnit":2320,"src":"185:81:66","symbolAliases":[{"foreign":{"id":14625,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"194:6:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":14628,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14687,"sourceUnit":14621,"src":"268:58:66","symbolAliases":[{"foreign":{"id":14627,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14620,"src":"277:16:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14629,"name":"IPoolPauseHelper","nameLocations":["356:16:66"],"nodeType":"IdentifierPath","referencedDeclaration":646,"src":"356:16:66"},"id":14630,"nodeType":"InheritanceSpecifier","src":"356:16:66"},{"baseName":{"id":14631,"name":"PoolHelperCommon","nameLocations":["374:16:66"],"nodeType":"IdentifierPath","referencedDeclaration":14620,"src":"374:16:66"},"id":14632,"nodeType":"InheritanceSpecifier","src":"374:16:66"}],"canonicalName":"PoolPauseHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":14686,"linearizedBaseContracts":[14686,14620,8623,6869,4159,81,635,646],"name":"PoolPauseHelper","nameLocation":"337:15:66","nodeType":"ContractDefinition","nodes":[{"body":{"id":14641,"nodeType":"Block","src":"447:64:66","statements":[]},"id":14642,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":14638,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14635,"src":"440:5:66","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":14639,"kind":"baseConstructorSpecifier","modifierName":{"id":14637,"name":"PoolHelperCommon","nameLocations":["423:16:66"],"nodeType":"IdentifierPath","referencedDeclaration":14620,"src":"423:16:66"},"nodeType":"ModifierInvocation","src":"423:23:66"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14635,"mutability":"mutable","name":"vault","nameLocation":"416:5:66","nodeType":"VariableDeclaration","scope":14642,"src":"409:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":14634,"nodeType":"UserDefinedTypeName","pathNode":{"id":14633,"name":"IVault","nameLocations":["409:6:66"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"409:6:66"},"referencedDeclaration":2319,"src":"409:6:66","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"408:14:66"},"returnParameters":{"id":14640,"nodeType":"ParameterList","parameters":[],"src":"447:0:66"},"scope":14686,"src":"397:114:66","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[645],"body":{"id":14684,"nodeType":"Block","src":"830:217:66","statements":[{"assignments":[14652],"declarations":[{"constant":false,"id":14652,"mutability":"mutable","name":"length","nameLocation":"848:6:66","nodeType":"VariableDeclaration","scope":14684,"src":"840:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14651,"name":"uint256","nodeType":"ElementaryTypeName","src":"840:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14655,"initialValue":{"expression":{"id":14653,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14646,"src":"857:5:66","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"863:6:66","memberName":"length","nodeType":"MemberAccess","src":"857:12:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"840:29:66"},{"body":{"id":14682,"nodeType":"Block","src":"916:125:66","statements":[{"assignments":[14667],"declarations":[{"constant":false,"id":14667,"mutability":"mutable","name":"pool","nameLocation":"938:4:66","nodeType":"VariableDeclaration","scope":14682,"src":"930:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14666,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14671,"initialValue":{"baseExpression":{"id":14668,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14646,"src":"945:5:66","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14670,"indexExpression":{"id":14669,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14657,"src":"951:1:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"945:8:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"930:23:66"},{"expression":{"arguments":[{"id":14673,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"984:4:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14672,"name":"_ensurePoolAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14612,"src":"967:16:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":14674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"967:22:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14675,"nodeType":"ExpressionStatement","src":"967:22:66"},{"expression":{"arguments":[{"id":14679,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14667,"src":"1025:4:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14676,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"1004:8:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":14677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1004:10:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":14678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1015:9:66","memberName":"pausePool","nodeType":"MemberAccess","referencedDeclaration":2421,"src":"1004:20:66","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":14680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1004:26:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14681,"nodeType":"ExpressionStatement","src":"1004:26:66"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14660,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14657,"src":"899:1:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14661,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14652,"src":"903:6:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"899:10:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14683,"initializationExpression":{"assignments":[14657],"declarations":[{"constant":false,"id":14657,"mutability":"mutable","name":"i","nameLocation":"892:1:66","nodeType":"VariableDeclaration","scope":14683,"src":"884:9:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14656,"name":"uint256","nodeType":"ElementaryTypeName","src":"884:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14659,"initialValue":{"hexValue":"30","id":14658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"896:1:66","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"884:13:66"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"911:3:66","subExpression":{"id":14663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14657,"src":"911:1:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14665,"nodeType":"ExpressionStatement","src":"911:3:66"},"nodeType":"ForStatement","src":"879:162:66"}]},"documentation":{"id":14643,"nodeType":"StructuredDocumentation","src":"729:32:66","text":"@inheritdoc IPoolPauseHelper"},"functionSelector":"a20dc529","id":14685,"implemented":true,"kind":"function","modifiers":[{"id":14649,"kind":"modifierInvocation","modifierName":{"id":14648,"name":"authenticate","nameLocations":["817:12:66"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"817:12:66"},"nodeType":"ModifierInvocation","src":"817:12:66"}],"name":"pausePools","nameLocation":"775:10:66","nodeType":"FunctionDefinition","parameters":{"id":14647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14646,"mutability":"mutable","name":"pools","nameLocation":"803:5:66","nodeType":"VariableDeclaration","scope":14685,"src":"786:22:66","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":14644,"name":"address","nodeType":"ElementaryTypeName","src":"786:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14645,"nodeType":"ArrayTypeName","src":"786:9:66","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"785:24:66"},"returnParameters":{"id":14650,"nodeType":"ParameterList","parameters":[],"src":"830:0:66"},"scope":14686,"src":"766:281:66","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":14687,"src":"328:721:66","usedErrors":[72,587,592,595,2631,6689],"usedEvents":[577,582]}],"src":"46:1004:66"},"id":66},"contracts/PoolSwapFeeHelper.sol":{"ast":{"absolutePath":"contracts/PoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[663],"IVault":[2319],"PoolHelperCommon":[14620],"PoolSwapFeeHelper":[14756]},"id":14757,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14688,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:67"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","id":14690,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14757,"sourceUnit":664,"src":"72:116:67","symbolAliases":[{"foreign":{"id":14689,"name":"IPoolSwapFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":663,"src":"81:18:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14692,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14757,"sourceUnit":2320,"src":"189:81:67","symbolAliases":[{"foreign":{"id":14691,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"198:6:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":14694,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14757,"sourceUnit":14621,"src":"272:58:67","symbolAliases":[{"foreign":{"id":14693,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14620,"src":"281:16:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14695,"name":"IPoolSwapFeeHelper","nameLocations":["362:18:67"],"nodeType":"IdentifierPath","referencedDeclaration":663,"src":"362:18:67"},"id":14696,"nodeType":"InheritanceSpecifier","src":"362:18:67"},{"baseName":{"id":14697,"name":"PoolHelperCommon","nameLocations":["382:16:67"],"nodeType":"IdentifierPath","referencedDeclaration":14620,"src":"382:16:67"},"id":14698,"nodeType":"InheritanceSpecifier","src":"382:16:67"}],"canonicalName":"PoolSwapFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":14756,"linearizedBaseContracts":[14756,14620,8623,6869,4159,81,635,663],"name":"PoolSwapFeeHelper","nameLocation":"341:17:67","nodeType":"ContractDefinition","nodes":[{"body":{"id":14707,"nodeType":"Block","src":"455:64:67","statements":[]},"id":14708,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":14704,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14701,"src":"448:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":14705,"kind":"baseConstructorSpecifier","modifierName":{"id":14703,"name":"PoolHelperCommon","nameLocations":["431:16:67"],"nodeType":"IdentifierPath","referencedDeclaration":14620,"src":"431:16:67"},"nodeType":"ModifierInvocation","src":"431:23:67"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14701,"mutability":"mutable","name":"vault","nameLocation":"424:5:67","nodeType":"VariableDeclaration","scope":14708,"src":"417:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":14700,"nodeType":"UserDefinedTypeName","pathNode":{"id":14699,"name":"IVault","nameLocations":["417:6:67"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"417:6:67"},"referencedDeclaration":2319,"src":"417:6:67","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"416:14:67"},"returnParameters":{"id":14706,"nodeType":"ParameterList","parameters":[],"src":"455:0:67"},"scope":14756,"src":"405:114:67","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[662],"body":{"id":14729,"nodeType":"Block","src":"873:112:67","statements":[{"expression":{"arguments":[{"id":14719,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14711,"src":"900:4:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14718,"name":"_ensurePoolAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14612,"src":"883:16:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":14720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"883:22:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14721,"nodeType":"ExpressionStatement","src":"883:22:67"},{"expression":{"arguments":[{"id":14725,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14711,"src":"954:4:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14726,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14713,"src":"960:17:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14722,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"916:8:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":14723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"916:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":14724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"927:26:67","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2435,"src":"916:37:67","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":14727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"916:62:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14728,"nodeType":"ExpressionStatement","src":"916:62:67"}]},"documentation":{"id":14709,"nodeType":"StructuredDocumentation","src":"737:34:67","text":"@inheritdoc IPoolSwapFeeHelper"},"functionSelector":"d15126ba","id":14730,"implemented":true,"kind":"function","modifiers":[{"id":14716,"kind":"modifierInvocation","modifierName":{"id":14715,"name":"authenticate","nameLocations":["860:12:67"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"860:12:67"},"nodeType":"ModifierInvocation","src":"860:12:67"}],"name":"setStaticSwapFeePercentage","nameLocation":"785:26:67","nodeType":"FunctionDefinition","parameters":{"id":14714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14711,"mutability":"mutable","name":"pool","nameLocation":"820:4:67","nodeType":"VariableDeclaration","scope":14730,"src":"812:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14710,"name":"address","nodeType":"ElementaryTypeName","src":"812:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14713,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"834:17:67","nodeType":"VariableDeclaration","scope":14730,"src":"826:25:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14712,"name":"uint256","nodeType":"ElementaryTypeName","src":"826:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"811:41:67"},"returnParameters":{"id":14717,"nodeType":"ParameterList","parameters":[],"src":"873:0:67"},"scope":14756,"src":"776:209:67","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[14619],"body":{"id":14754,"nodeType":"Block","src":"1334:192:67","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":14740,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"1428:4:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14737,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"1397:8:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":14738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1397:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":14739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1408:19:67","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3550,"src":"1397:30:67","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$3885_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":14741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1397:36:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$3885_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":14742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1434:14:67","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":3882,"src":"1397:51:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":14745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1460:1:67","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1452:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14743,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:67","typeDescriptions":{}}},"id":14746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1452:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1397:65:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14753,"nodeType":"IfStatement","src":"1393:127:67","trueBody":{"id":14752,"nodeType":"Block","src":"1464:56:67","statements":[{"errorCall":{"arguments":[{"id":14749,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"1504:4:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14748,"name":"PoolHasSwapManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":654,"src":"1485:18:67","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":14750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1485:24:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14751,"nodeType":"RevertStatement","src":"1478:31:67"}]}}]},"documentation":{"id":14731,"nodeType":"StructuredDocumentation","src":"1237:32:67","text":"@inheritdoc PoolHelperCommon"},"id":14755,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"1283:13:67","nodeType":"FunctionDefinition","overrides":{"id":14735,"nodeType":"OverrideSpecifier","overrides":[],"src":"1325:8:67"},"parameters":{"id":14734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14733,"mutability":"mutable","name":"pool","nameLocation":"1305:4:67","nodeType":"VariableDeclaration","scope":14755,"src":"1297:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14732,"name":"address","nodeType":"ElementaryTypeName","src":"1297:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1296:14:67"},"returnParameters":{"id":14736,"nodeType":"ParameterList","parameters":[],"src":"1334:0:67"},"scope":14756,"src":"1274:252:67","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":14757,"src":"332:1196:67","usedErrors":[72,587,592,595,654,2631,6689],"usedEvents":[577,582]}],"src":"46:1483:67"},"id":67},"contracts/PriceImpactHelper.sol":{"ast":{"absolutePath":"contracts/PriceImpactHelper.sol","exportedSymbols":{"CallAndRevert":[13306],"FixedPoint":[4921],"IERC20":[9632],"IRouter":[2249],"IVault":[2319],"PriceImpactHelper":[15442],"SafeCast":[12026]},"id":15443,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14758,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:68"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":14760,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15443,"sourceUnit":9633,"src":"72:72:68","symbolAliases":[{"foreign":{"id":14759,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":14762,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15443,"sourceUnit":12027,"src":"145:75:68","symbolAliases":[{"foreign":{"id":14761,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"154:8:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14764,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15443,"sourceUnit":2320,"src":"222:81:68","symbolAliases":[{"foreign":{"id":14763,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"231:6:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":14766,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15443,"sourceUnit":2250,"src":"304:83:68","symbolAliases":[{"foreign":{"id":14765,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2249,"src":"313:7:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":14768,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15443,"sourceUnit":4922,"src":"389:92:68","symbolAliases":[{"foreign":{"id":14767,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"398:10:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CallAndRevert.sol","file":"./CallAndRevert.sol","id":14770,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15443,"sourceUnit":13307,"src":"483:52:68","symbolAliases":[{"foreign":{"id":14769,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13306,"src":"492:13:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14771,"name":"CallAndRevert","nameLocations":["567:13:68"],"nodeType":"IdentifierPath","referencedDeclaration":13306,"src":"567:13:68"},"id":14772,"nodeType":"InheritanceSpecifier","src":"567:13:68"}],"canonicalName":"PriceImpactHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":15442,"linearizedBaseContracts":[15442,13306],"name":"PriceImpactHelper","nameLocation":"546:17:68","nodeType":"ContractDefinition","nodes":[{"global":false,"id":14775,"libraryName":{"id":14773,"name":"FixedPoint","nameLocations":["593:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":4921,"src":"593:10:68"},"nodeType":"UsingForDirective","src":"587:29:68","typeName":{"id":14774,"name":"uint256","nodeType":"ElementaryTypeName","src":"608:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":14777,"libraryName":{"id":14776,"name":"SafeCast","nameLocations":["627:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":12026,"src":"627:8:68"},"nodeType":"UsingForDirective","src":"621:21:68"},{"constant":false,"id":14780,"mutability":"immutable","name":"_vault","nameLocation":"674:6:68","nodeType":"VariableDeclaration","scope":15442,"src":"648:32:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":14779,"nodeType":"UserDefinedTypeName","pathNode":{"id":14778,"name":"IVault","nameLocations":["648:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"648:6:68"},"referencedDeclaration":2319,"src":"648:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":14783,"mutability":"immutable","name":"_router","nameLocation":"713:7:68","nodeType":"VariableDeclaration","scope":15442,"src":"686:34:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"},"typeName":{"id":14782,"nodeType":"UserDefinedTypeName","pathNode":{"id":14781,"name":"IRouter","nameLocations":["686:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":2249,"src":"686:7:68"},"referencedDeclaration":2249,"src":"686:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"visibility":"internal"},{"body":{"id":14800,"nodeType":"Block","src":"769:57:68","statements":[{"expression":{"id":14794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14792,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14780,"src":"779:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14793,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14786,"src":"788:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"src":"779:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":14795,"nodeType":"ExpressionStatement","src":"779:14:68"},{"expression":{"id":14798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14796,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"803:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14797,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14789,"src":"813:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"src":"803:16:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"id":14799,"nodeType":"ExpressionStatement","src":"803:16:68"}]},"id":14801,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14786,"mutability":"mutable","name":"vault","nameLocation":"746:5:68","nodeType":"VariableDeclaration","scope":14801,"src":"739:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":14785,"nodeType":"UserDefinedTypeName","pathNode":{"id":14784,"name":"IVault","nameLocations":["739:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"739:6:68"},"referencedDeclaration":2319,"src":"739:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":14789,"mutability":"mutable","name":"router","nameLocation":"761:6:68","nodeType":"VariableDeclaration","scope":14801,"src":"753:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"},"typeName":{"id":14788,"nodeType":"UserDefinedTypeName","pathNode":{"id":14787,"name":"IRouter","nameLocations":["753:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":2249,"src":"753:7:68"},"referencedDeclaration":2249,"src":"753:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"738:30:68"},"returnParameters":{"id":14791,"nodeType":"ParameterList","parameters":[],"src":"769:0:68"},"scope":15442,"src":"727:99:68","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":14937,"nodeType":"Block","src":"1232:1364:68","statements":[{"assignments":[14814],"declarations":[{"constant":false,"id":14814,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1250:12:68","nodeType":"VariableDeclaration","scope":14937,"src":"1242:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14813,"name":"uint256","nodeType":"ElementaryTypeName","src":"1242:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14820,"initialValue":{"arguments":[{"id":14816,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14803,"src":"1294:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14817,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"1300:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14818,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"1316:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14815,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14974,"src":"1265:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":14819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1265:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1242:81:68"},{"assignments":[14825],"declarations":[{"constant":false,"id":14825,"mutability":"mutable","name":"proportionalAmountsOut","nameLocation":"1350:22:68","nodeType":"VariableDeclaration","scope":14937,"src":"1333:39:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14823,"name":"uint256","nodeType":"ElementaryTypeName","src":"1333:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14824,"nodeType":"ArrayTypeName","src":"1333:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14831,"initialValue":{"arguments":[{"id":14827,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14803,"src":"1409:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14828,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14814,"src":"1415:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14829,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"1429:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14826,"name":"_queryRemoveLiquidityProportional","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"1375:33:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,uint256,address) returns (uint256[] memory)"}},"id":14830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:61:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1333:103:68"},{"assignments":[14836],"declarations":[{"constant":false,"id":14836,"mutability":"mutable","name":"deltas","nameLocation":"1535:6:68","nodeType":"VariableDeclaration","scope":14937,"src":"1519:22:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":14834,"name":"int256","nodeType":"ElementaryTypeName","src":"1519:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14835,"nodeType":"ArrayTypeName","src":"1519:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":14843,"initialValue":{"arguments":[{"expression":{"id":14840,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"1557:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1572:6:68","memberName":"length","nodeType":"MemberAccess","src":"1557:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1544:12:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":14837,"name":"int256","nodeType":"ElementaryTypeName","src":"1548:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14838,"nodeType":"ArrayTypeName","src":"1548:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":14842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1544:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1519:60:68"},{"body":{"id":14871,"nodeType":"Block","src":"1641:104:68","statements":[{"expression":{"id":14869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14855,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14836,"src":"1655:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":14857,"indexExpression":{"id":14856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"1662:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1655:9:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":14868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":14858,"name":"proportionalAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14825,"src":"1667:22:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14860,"indexExpression":{"id":14859,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"1690:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1667:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1693:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":12025,"src":"1667:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":14862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1667:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":14863,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"1706:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14865,"indexExpression":{"id":14864,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"1721:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1706:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1724:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":12025,"src":"1706:26:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":14867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1706:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1667:67:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1655:79:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14870,"nodeType":"ExpressionStatement","src":"1655:79:68"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"1609:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14849,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"1613:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1628:6:68","memberName":"length","nodeType":"MemberAccess","src":"1613:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1609:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14872,"initializationExpression":{"assignments":[14845],"declarations":[{"constant":false,"id":14845,"mutability":"mutable","name":"i","nameLocation":"1602:1:68","nodeType":"VariableDeclaration","scope":14872,"src":"1594:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14844,"name":"uint256","nodeType":"ElementaryTypeName","src":"1594:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14847,"initialValue":{"hexValue":"30","id":14846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1606:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1594:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1636:3:68","subExpression":{"id":14852,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"1636:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14854,"nodeType":"ExpressionStatement","src":"1636:3:68"},"nodeType":"ForStatement","src":"1589:156:68"},{"assignments":[14877],"declarations":[{"constant":false,"id":14877,"mutability":"mutable","name":"deltaBPTs","nameLocation":"1878:9:68","nodeType":"VariableDeclaration","scope":14937,"src":"1862:25:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":14875,"name":"int256","nodeType":"ElementaryTypeName","src":"1862:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14876,"nodeType":"ArrayTypeName","src":"1862:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":14884,"initialValue":{"arguments":[{"expression":{"id":14881,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"1903:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1918:6:68","memberName":"length","nodeType":"MemberAccess","src":"1903:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1890:12:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":14878,"name":"int256","nodeType":"ElementaryTypeName","src":"1894:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14879,"nodeType":"ArrayTypeName","src":"1894:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":14883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1890:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1862:63:68"},{"body":{"id":14907,"nodeType":"Block","src":"1987:107:68","statements":[{"expression":{"id":14905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14896,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14877,"src":"2001:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":14898,"indexExpression":{"id":14897,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"2011:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2001:12:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14900,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14803,"src":"2059:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14901,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"2065:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14902,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14836,"src":"2068:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":14903,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"2076:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14899,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15171,"src":"2016:42:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":14904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2016:67:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2001:82:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14906,"nodeType":"ExpressionStatement","src":"2001:82:68"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14889,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"1955:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":14890,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"1959:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1974:6:68","memberName":"length","nodeType":"MemberAccess","src":"1959:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1955:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14908,"initializationExpression":{"assignments":[14886],"declarations":[{"constant":false,"id":14886,"mutability":"mutable","name":"i","nameLocation":"1948:1:68","nodeType":"VariableDeclaration","scope":14908,"src":"1940:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14885,"name":"uint256","nodeType":"ElementaryTypeName","src":"1940:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14888,"initialValue":{"hexValue":"30","id":14887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1952:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1940:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":14894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1982:3:68","subExpression":{"id":14893,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"1982:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14895,"nodeType":"ExpressionStatement","src":"1982:3:68"},"nodeType":"ForStatement","src":"1935:159:68"},{"assignments":[14910],"declarations":[{"constant":false,"id":14910,"mutability":"mutable","name":"remainingDeltaIndex","nameLocation":"2192:19:68","nodeType":"VariableDeclaration","scope":14937,"src":"2184:27:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14909,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14917,"initialValue":{"arguments":[{"id":14912,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14803,"src":"2229:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14913,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14836,"src":"2235:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":14914,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14877,"src":"2243:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":14915,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14808,"src":"2254:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14911,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15335,"src":"2214:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":14916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2214:47:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2184:77:68"},{"assignments":[14919],"declarations":[{"constant":false,"id":14919,"mutability":"mutable","name":"delta","nameLocation":"2468:5:68","nodeType":"VariableDeclaration","scope":14937,"src":"2460:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14918,"name":"uint256","nodeType":"ElementaryTypeName","src":"2460:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14927,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":14923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2477:28:68","subExpression":{"baseExpression":{"id":14920,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14836,"src":"2478:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":14922,"indexExpression":{"id":14921,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14910,"src":"2485:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2478:27:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":14924,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2476:30:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2507:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":11189,"src":"2476:40:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":14926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2476:42:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2460:58:68"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":14930,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14806,"src":"2549:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14932,"indexExpression":{"id":14931,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14910,"src":"2564:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2549:35:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14928,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14919,"src":"2535:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2541:7:68","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4703,"src":"2535:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2535:50:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":14934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2588:1:68","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2535:54:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14812,"id":14936,"nodeType":"Return","src":"2528:61:68"}]},"functionSelector":"48406a54","id":14938,"implemented":true,"kind":"function","modifiers":[],"name":"calculateAddLiquidityUnbalancedPriceImpact","nameLocation":"1057:42:68","nodeType":"FunctionDefinition","parameters":{"id":14809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14803,"mutability":"mutable","name":"pool","nameLocation":"1117:4:68","nodeType":"VariableDeclaration","scope":14938,"src":"1109:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14802,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14806,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1148:14:68","nodeType":"VariableDeclaration","scope":14938,"src":"1131:31:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14804,"name":"uint256","nodeType":"ElementaryTypeName","src":"1131:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14805,"nodeType":"ArrayTypeName","src":"1131:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14808,"mutability":"mutable","name":"sender","nameLocation":"1180:6:68","nodeType":"VariableDeclaration","scope":14938,"src":"1172:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14807,"name":"address","nodeType":"ElementaryTypeName","src":"1172:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1099:93:68"},"returnParameters":{"id":14812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14811,"mutability":"mutable","name":"priceImpact","nameLocation":"1219:11:68","nodeType":"VariableDeclaration","scope":14938,"src":"1211:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14810,"name":"uint256","nodeType":"ElementaryTypeName","src":"1211:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1210:21:68"},"scope":15442,"src":"1048:1548:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14973,"nodeType":"Block","src":"2978:441:68","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":14955,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"3079:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}],"id":14954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3071:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14953,"name":"address","nodeType":"ElementaryTypeName","src":"3071:7:68","typeDescriptions":{}}},"id":14956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3071:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":14959,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"3157:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"id":14960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3165:27:68","memberName":"queryAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":2087,"src":"3157:35:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address,bytes memory) external returns (uint256)"}},"id":14961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3193:8:68","memberName":"selector","nodeType":"MemberAccess","src":"3157:44:68","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14962,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"3227:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14963,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14943,"src":"3257:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14964,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"3297:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":14965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3329:2:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":14957,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3109:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3113:18:68","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3109:22:68","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3109:244:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":14952,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13245,"src":"3035:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":14967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3035:336:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":14969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3390:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14968,"name":"uint256","nodeType":"ElementaryTypeName","src":"3390:7:68","typeDescriptions":{}}}],"id":14970,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3389:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":14950,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3007:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3011:6:68","memberName":"decode","nodeType":"MemberAccess","src":"3007:10:68","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":14971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3007:405:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14949,"id":14972,"nodeType":"Return","src":"2988:424:68"}]},"id":14974,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalanced","nameLocation":"2829:28:68","nodeType":"FunctionDefinition","parameters":{"id":14946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14940,"mutability":"mutable","name":"pool","nameLocation":"2875:4:68","nodeType":"VariableDeclaration","scope":14974,"src":"2867:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14939,"name":"address","nodeType":"ElementaryTypeName","src":"2867:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14943,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2906:14:68","nodeType":"VariableDeclaration","scope":14974,"src":"2889:31:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14941,"name":"uint256","nodeType":"ElementaryTypeName","src":"2889:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14942,"nodeType":"ArrayTypeName","src":"2889:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14945,"mutability":"mutable","name":"sender","nameLocation":"2938:6:68","nodeType":"VariableDeclaration","scope":14974,"src":"2930:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14944,"name":"address","nodeType":"ElementaryTypeName","src":"2930:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2857:93:68"},"returnParameters":{"id":14949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14974,"src":"2969:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14947,"name":"uint256","nodeType":"ElementaryTypeName","src":"2969:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2968:9:68"},"scope":15442,"src":"2820:599:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15010,"nodeType":"Block","src":"3586:446:68","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":14991,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"3687:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}],"id":14990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3679:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14989,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:68","typeDescriptions":{}}},"id":14992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3679:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":14995,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"3765:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"id":14996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3773:32:68","memberName":"queryRemoveLiquidityProportional","nodeType":"MemberAccess","referencedDeclaration":2141,"src":"3765:40:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,uint256,address,bytes memory) external returns (uint256[] memory)"}},"id":14997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3806:8:68","memberName":"selector","nodeType":"MemberAccess","src":"3765:49:68","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14998,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14976,"src":"3840:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14999,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14978,"src":"3870:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15000,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"3908:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":15001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3940:2:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":14993,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3717:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14994,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3721:18:68","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3717:22:68","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":15002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:247:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":14988,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13245,"src":"3643:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":15003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3643:339:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":15005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4001:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15004,"name":"uint256","nodeType":"ElementaryTypeName","src":"4001:7:68","typeDescriptions":{}}},"id":15006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4001:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":15007,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4000:11:68","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}],"expression":{"id":14986,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3615:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3619:6:68","memberName":"decode","nodeType":"MemberAccess","src":"3615:10:68","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":15008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3615:410:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":14985,"id":15009,"nodeType":"Return","src":"3596:429:68"}]},"id":15011,"implemented":true,"kind":"function","modifiers":[],"name":"_queryRemoveLiquidityProportional","nameLocation":"3434:33:68","nodeType":"FunctionDefinition","parameters":{"id":14981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14976,"mutability":"mutable","name":"pool","nameLocation":"3485:4:68","nodeType":"VariableDeclaration","scope":15011,"src":"3477:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14975,"name":"address","nodeType":"ElementaryTypeName","src":"3477:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14978,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3507:12:68","nodeType":"VariableDeclaration","scope":15011,"src":"3499:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14977,"name":"uint256","nodeType":"ElementaryTypeName","src":"3499:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14980,"mutability":"mutable","name":"sender","nameLocation":"3537:6:68","nodeType":"VariableDeclaration","scope":15011,"src":"3529:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14979,"name":"address","nodeType":"ElementaryTypeName","src":"3529:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3467:82:68"},"returnParameters":{"id":14985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15011,"src":"3568:16:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14982,"name":"uint256","nodeType":"ElementaryTypeName","src":"3568:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14983,"nodeType":"ArrayTypeName","src":"3568:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3567:18:68"},"scope":15442,"src":"3425:607:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15053,"nodeType":"Block","src":"4230:502:68","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":15033,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"4331:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}],"id":15032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4323:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15031,"name":"address","nodeType":"ElementaryTypeName","src":"4323:7:68","typeDescriptions":{}}},"id":15034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4323:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":15037,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"4409:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"id":15038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4417:27:68","memberName":"querySwapSingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":2228,"src":"4409:35:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address,bytes memory) external returns (uint256)"}},"id":15039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4445:8:68","memberName":"selector","nodeType":"MemberAccess","src":"4409:44:68","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":15040,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15013,"src":"4479:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15041,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15016,"src":"4509:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":15042,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15019,"src":"4542:8:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":15043,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15021,"src":"4576:8:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15044,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15023,"src":"4610:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":15045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4642:2:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":15035,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4361:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4365:18:68","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4361:22:68","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":15046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4361:305:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":15030,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13245,"src":"4287:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":15047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4287:397:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":15049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4703:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15048,"name":"uint256","nodeType":"ElementaryTypeName","src":"4703:7:68","typeDescriptions":{}}}],"id":15050,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4702:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":15028,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4259:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4263:6:68","memberName":"decode","nodeType":"MemberAccess","src":"4259:10:68","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":15051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4259:466:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15027,"id":15052,"nodeType":"Return","src":"4240:485:68"}]},"id":15054,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactIn","nameLocation":"4047:28:68","nodeType":"FunctionDefinition","parameters":{"id":15024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15013,"mutability":"mutable","name":"pool","nameLocation":"4093:4:68","nodeType":"VariableDeclaration","scope":15054,"src":"4085:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15012,"name":"address","nodeType":"ElementaryTypeName","src":"4085:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15016,"mutability":"mutable","name":"tokenIn","nameLocation":"4114:7:68","nodeType":"VariableDeclaration","scope":15054,"src":"4107:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":15015,"nodeType":"UserDefinedTypeName","pathNode":{"id":15014,"name":"IERC20","nameLocations":["4107:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4107:6:68"},"referencedDeclaration":9632,"src":"4107:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15019,"mutability":"mutable","name":"tokenOut","nameLocation":"4138:8:68","nodeType":"VariableDeclaration","scope":15054,"src":"4131:15:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":15018,"nodeType":"UserDefinedTypeName","pathNode":{"id":15017,"name":"IERC20","nameLocations":["4131:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4131:6:68"},"referencedDeclaration":9632,"src":"4131:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15021,"mutability":"mutable","name":"amountIn","nameLocation":"4164:8:68","nodeType":"VariableDeclaration","scope":15054,"src":"4156:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15020,"name":"uint256","nodeType":"ElementaryTypeName","src":"4156:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15023,"mutability":"mutable","name":"sender","nameLocation":"4190:6:68","nodeType":"VariableDeclaration","scope":15054,"src":"4182:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15022,"name":"address","nodeType":"ElementaryTypeName","src":"4182:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4075:127:68"},"returnParameters":{"id":15027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15026,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15054,"src":"4221:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15025,"name":"uint256","nodeType":"ElementaryTypeName","src":"4221:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4220:9:68"},"scope":15442,"src":"4038:694:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15096,"nodeType":"Block","src":"4932:504:68","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":15076,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"5033:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}],"id":15075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5025:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15074,"name":"address","nodeType":"ElementaryTypeName","src":"5025:7:68","typeDescriptions":{}}},"id":15077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5025:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":15080,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14783,"src":"5111:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"id":15081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5119:28:68","memberName":"querySwapSingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":2248,"src":"5111:36:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address,bytes memory) external returns (uint256)"}},"id":15082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5148:8:68","memberName":"selector","nodeType":"MemberAccess","src":"5111:45:68","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":15083,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15056,"src":"5182:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15084,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15059,"src":"5212:7:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":15085,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15062,"src":"5245:8:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":15086,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15064,"src":"5279:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15087,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15066,"src":"5314:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":15088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5346:2:68","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":15078,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5063:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5067:18:68","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5063:22:68","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":15089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5063:307:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":15073,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13245,"src":"4989:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":15090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4989:399:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":15092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5407:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15091,"name":"uint256","nodeType":"ElementaryTypeName","src":"5407:7:68","typeDescriptions":{}}}],"id":15093,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5406:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":15071,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4961:3:68","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4965:6:68","memberName":"decode","nodeType":"MemberAccess","src":"4961:10:68","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":15094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4961:468:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15070,"id":15095,"nodeType":"Return","src":"4942:487:68"}]},"id":15097,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactOut","nameLocation":"4747:29:68","nodeType":"FunctionDefinition","parameters":{"id":15067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15056,"mutability":"mutable","name":"pool","nameLocation":"4794:4:68","nodeType":"VariableDeclaration","scope":15097,"src":"4786:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15055,"name":"address","nodeType":"ElementaryTypeName","src":"4786:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15059,"mutability":"mutable","name":"tokenIn","nameLocation":"4815:7:68","nodeType":"VariableDeclaration","scope":15097,"src":"4808:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":15058,"nodeType":"UserDefinedTypeName","pathNode":{"id":15057,"name":"IERC20","nameLocations":["4808:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4808:6:68"},"referencedDeclaration":9632,"src":"4808:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15062,"mutability":"mutable","name":"tokenOut","nameLocation":"4839:8:68","nodeType":"VariableDeclaration","scope":15097,"src":"4832:15:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":15061,"nodeType":"UserDefinedTypeName","pathNode":{"id":15060,"name":"IERC20","nameLocations":["4832:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4832:6:68"},"referencedDeclaration":9632,"src":"4832:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15064,"mutability":"mutable","name":"amountOut","nameLocation":"4865:9:68","nodeType":"VariableDeclaration","scope":15097,"src":"4857:17:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15063,"name":"uint256","nodeType":"ElementaryTypeName","src":"4857:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15066,"mutability":"mutable","name":"sender","nameLocation":"4892:6:68","nodeType":"VariableDeclaration","scope":15097,"src":"4884:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15065,"name":"address","nodeType":"ElementaryTypeName","src":"4884:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4776:128:68"},"returnParameters":{"id":15070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15097,"src":"4923:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15068,"name":"uint256","nodeType":"ElementaryTypeName","src":"4923:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4922:9:68"},"scope":15442,"src":"4738:698:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15170,"nodeType":"Block","src":"5847:412:68","statements":[{"assignments":[15115],"declarations":[{"constant":false,"id":15115,"mutability":"mutable","name":"zerosWithSingleDelta","nameLocation":"5874:20:68","nodeType":"VariableDeclaration","scope":15170,"src":"5857:37:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15113,"name":"uint256","nodeType":"ElementaryTypeName","src":"5857:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15114,"nodeType":"ArrayTypeName","src":"5857:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":15122,"initialValue":{"arguments":[{"expression":{"id":15119,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15104,"src":"5911:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5918:6:68","memberName":"length","nodeType":"MemberAccess","src":"5911:13:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5897:13:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":15116,"name":"uint256","nodeType":"ElementaryTypeName","src":"5901:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15117,"nodeType":"ArrayTypeName","src":"5901:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":15121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5897:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5857:68:68"},{"assignments":[15124],"declarations":[{"constant":false,"id":15124,"mutability":"mutable","name":"delta","nameLocation":"5942:5:68","nodeType":"VariableDeclaration","scope":15170,"src":"5935:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15123,"name":"int256","nodeType":"ElementaryTypeName","src":"5935:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":15128,"initialValue":{"baseExpression":{"id":15125,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15104,"src":"5950:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15127,"indexExpression":{"id":15126,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15101,"src":"5957:10:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5950:18:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5935:33:68"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15129,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15124,"src":"5983:5:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5992:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5983:10:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15135,"nodeType":"IfStatement","src":"5979:49:68","trueBody":{"id":15134,"nodeType":"Block","src":"5995:33:68","statements":[{"expression":{"hexValue":"30","id":15132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6016:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":15110,"id":15133,"nodeType":"Return","src":"6009:8:68"}]}},{"expression":{"id":15149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15136,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15115,"src":"6038:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15138,"indexExpression":{"id":15137,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15101,"src":"6059:10:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6038:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15141,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15124,"src":"6081:5:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6089:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6081:9:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":15146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6101:6:68","subExpression":{"id":15145,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15124,"src":"6102:5:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6081:26:68","trueExpression":{"id":15144,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15124,"src":"6093:5:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6073:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15139,"name":"uint256","nodeType":"ElementaryTypeName","src":"6073:7:68","typeDescriptions":{}}},"id":15148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6038:70:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15150,"nodeType":"ExpressionStatement","src":"6038:70:68"},{"assignments":[15152],"declarations":[{"constant":false,"id":15152,"mutability":"mutable","name":"result","nameLocation":"6125:6:68","nodeType":"VariableDeclaration","scope":15170,"src":"6118:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15151,"name":"int256","nodeType":"ElementaryTypeName","src":"6118:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":15161,"initialValue":{"arguments":[{"arguments":[{"id":15156,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15099,"src":"6170:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15157,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15115,"src":"6176:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15158,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15106,"src":"6198:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15155,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14974,"src":"6141:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":15159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6141:64:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6134:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":15153,"name":"int256","nodeType":"ElementaryTypeName","src":"6134:6:68","typeDescriptions":{}}},"id":15160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6134:72:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6118:88:68"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15162,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15124,"src":"6224:5:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6232:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6224:9:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":15167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6245:7:68","subExpression":{"id":15166,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15152,"src":"6246:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6224:28:68","trueExpression":{"id":15165,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15152,"src":"6236:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":15110,"id":15169,"nodeType":"Return","src":"6217:35:68"}]},"id":15171,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"5666:42:68","nodeType":"FunctionDefinition","parameters":{"id":15107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15099,"mutability":"mutable","name":"pool","nameLocation":"5726:4:68","nodeType":"VariableDeclaration","scope":15171,"src":"5718:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15098,"name":"address","nodeType":"ElementaryTypeName","src":"5718:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15101,"mutability":"mutable","name":"tokenIndex","nameLocation":"5748:10:68","nodeType":"VariableDeclaration","scope":15171,"src":"5740:18:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15100,"name":"uint256","nodeType":"ElementaryTypeName","src":"5740:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15104,"mutability":"mutable","name":"deltas","nameLocation":"5784:6:68","nodeType":"VariableDeclaration","scope":15171,"src":"5768:22:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":15102,"name":"int256","nodeType":"ElementaryTypeName","src":"5768:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15103,"nodeType":"ArrayTypeName","src":"5768:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":15106,"mutability":"mutable","name":"sender","nameLocation":"5808:6:68","nodeType":"VariableDeclaration","scope":15171,"src":"5800:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15105,"name":"address","nodeType":"ElementaryTypeName","src":"5800:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5708:112:68"},"returnParameters":{"id":15110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15109,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15171,"src":"5839:6:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15108,"name":"int256","nodeType":"ElementaryTypeName","src":"5839:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5838:8:68"},"scope":15442,"src":"5657:602:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15334,"nodeType":"Block","src":"6435:1945:68","statements":[{"assignments":[15187],"declarations":[{"constant":false,"id":15187,"mutability":"mutable","name":"maxNegativeDeltaIndex","nameLocation":"6524:21:68","nodeType":"VariableDeclaration","scope":15334,"src":"6516:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15186,"name":"uint256","nodeType":"ElementaryTypeName","src":"6516:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15189,"initialValue":{"hexValue":"30","id":15188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6548:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6516:33:68"},{"assignments":[15194],"declarations":[{"constant":false,"id":15194,"mutability":"mutable","name":"poolTokens","nameLocation":"6575:10:68","nodeType":"VariableDeclaration","scope":15334,"src":"6559:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":15192,"nodeType":"UserDefinedTypeName","pathNode":{"id":15191,"name":"IERC20","nameLocations":["6559:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"6559:6:68"},"referencedDeclaration":9632,"src":"6559:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":15193,"nodeType":"ArrayTypeName","src":"6559:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":15199,"initialValue":{"arguments":[{"id":15197,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15173,"src":"6609:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15195,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14780,"src":"6588:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":15196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6595:13:68","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3353,"src":"6588:20:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":15198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6588:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6559:55:68"},{"body":{"id":15330,"nodeType":"Block","src":"6673:1662:68","statements":[{"assignments":[15214],"declarations":[{"constant":false,"id":15214,"mutability":"mutable","name":"minPositiveDeltaIndex","nameLocation":"6762:21:68","nodeType":"VariableDeclaration","scope":15330,"src":"6754:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15213,"name":"uint256","nodeType":"ElementaryTypeName","src":"6754:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15218,"initialValue":{"arguments":[{"id":15216,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"6804:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":15215,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15388,"src":"6786:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":15217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6786:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6754:60:68"},{"expression":{"id":15223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15219,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15187,"src":"6828:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15221,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"6870:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":15220,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15441,"src":"6852:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":15222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6852:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6828:52:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15224,"nodeType":"ExpressionStatement","src":"6828:52:68"},{"assignments":[15226],"declarations":[{"constant":false,"id":15226,"mutability":"mutable","name":"givenTokenIndex","nameLocation":"6903:15:68","nodeType":"VariableDeclaration","scope":15330,"src":"6895:23:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15225,"name":"uint256","nodeType":"ElementaryTypeName","src":"6895:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15227,"nodeType":"VariableDeclarationStatement","src":"6895:23:68"},{"assignments":[15229],"declarations":[{"constant":false,"id":15229,"mutability":"mutable","name":"resultTokenIndex","nameLocation":"6940:16:68","nodeType":"VariableDeclaration","scope":15330,"src":"6932:24:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15228,"name":"uint256","nodeType":"ElementaryTypeName","src":"6932:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15230,"nodeType":"VariableDeclarationStatement","src":"6932:24:68"},{"assignments":[15232],"declarations":[{"constant":false,"id":15232,"mutability":"mutable","name":"resultAmount","nameLocation":"6978:12:68","nodeType":"VariableDeclaration","scope":15330,"src":"6970:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15231,"name":"uint256","nodeType":"ElementaryTypeName","src":"6970:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15233,"nodeType":"VariableDeclarationStatement","src":"6970:20:68"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15234,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"7009:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15236,"indexExpression":{"id":15235,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15214,"src":"7019:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7009:32:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7044:33:68","subExpression":{"baseExpression":{"id":15237,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"7045:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15239,"indexExpression":{"id":15238,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15187,"src":"7055:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7045:32:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7009:68:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15297,"nodeType":"Block","src":"7504:423:68","statements":[{"expression":{"id":15271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15269,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7522:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15270,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15187,"src":"7540:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15272,"nodeType":"ExpressionStatement","src":"7522:39:68"},{"expression":{"id":15275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15273,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"7579:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15274,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15214,"src":"7598:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7579:40:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15276,"nodeType":"ExpressionStatement","src":"7579:40:68"},{"expression":{"id":15295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15277,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7637:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15279,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15173,"src":"7703:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":15280,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15194,"src":"7729:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15282,"indexExpression":{"id":15281,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"7740:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7729:28:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"baseExpression":{"id":15283,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15194,"src":"7779:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15285,"indexExpression":{"id":15284,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7790:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7779:27:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":15289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7829:24:68","subExpression":{"baseExpression":{"id":15286,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"7830:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15288,"indexExpression":{"id":15287,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7837:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7830:23:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":15290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7828:26:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7855:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":11189,"src":"7828:36:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7828:38:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15293,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15181,"src":"7888:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15278,"name":"_querySwapSingleTokenExactOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15097,"src":"7652:29:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":15294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7652:260:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7637:275:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15296,"nodeType":"ExpressionStatement","src":"7637:275:68"}]},"id":15298,"nodeType":"IfStatement","src":"7005:922:68","trueBody":{"id":15268,"nodeType":"Block","src":"7079:419:68","statements":[{"expression":{"id":15244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15242,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7097:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15243,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15214,"src":"7115:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7097:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15245,"nodeType":"ExpressionStatement","src":"7097:39:68"},{"expression":{"id":15248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15246,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"7154:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15247,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15187,"src":"7173:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7154:40:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15249,"nodeType":"ExpressionStatement","src":"7154:40:68"},{"expression":{"id":15266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15250,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"7212:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15252,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15173,"src":"7277:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":15253,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15194,"src":"7303:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15255,"indexExpression":{"id":15254,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7314:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7303:27:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"baseExpression":{"id":15256,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15194,"src":"7352:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15258,"indexExpression":{"id":15257,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"7363:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7352:28:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":15259,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"7402:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15261,"indexExpression":{"id":15260,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7409:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7402:23:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7426:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":11189,"src":"7402:33:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":15263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7402:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15264,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15181,"src":"7459:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15251,"name":"_querySwapSingleTokenExactIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15054,"src":"7227:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":15265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:256:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7212:271:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15267,"nodeType":"ExpressionStatement","src":"7212:271:68"}]}},{"expression":{"id":15303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15299,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"7984:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15301,"indexExpression":{"id":15300,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"7991:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7984:23:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":15302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8010:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7984:27:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15304,"nodeType":"ExpressionStatement","src":"7984:27:68"},{"expression":{"id":15309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15305,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"8025:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15307,"indexExpression":{"id":15306,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"8035:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8025:26:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":15308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8054:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8025:30:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15310,"nodeType":"ExpressionStatement","src":"8025:30:68"},{"expression":{"id":15317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15311,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"8069:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15313,"indexExpression":{"id":15312,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"8076:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8069:24:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15314,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15232,"src":"8097:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8110:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":12025,"src":"8097:21:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":15316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8097:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8069:51:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15318,"nodeType":"ExpressionStatement","src":"8069:51:68"},{"expression":{"id":15328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15319,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"8134:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15321,"indexExpression":{"id":15320,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"8144:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8134:27:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15323,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15173,"src":"8224:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15324,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15229,"src":"8246:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15325,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"8280:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":15326,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15181,"src":"8304:6:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15322,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15171,"src":"8164:42:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":15327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8164:160:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8134:190:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15329,"nodeType":"ExpressionStatement","src":"8134:190:68"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15204,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15201,"src":"6645:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15205,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"6649:6:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6656:6:68","memberName":"length","nodeType":"MemberAccess","src":"6649:13:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":15207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6665:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6649:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6645:21:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15331,"initializationExpression":{"assignments":[15201],"declarations":[{"constant":false,"id":15201,"mutability":"mutable","name":"i","nameLocation":"6638:1:68","nodeType":"VariableDeclaration","scope":15331,"src":"6630:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15200,"name":"uint256","nodeType":"ElementaryTypeName","src":"6630:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15203,"initialValue":{"hexValue":"30","id":15202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6642:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6630:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6668:3:68","subExpression":{"id":15210,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15201,"src":"6668:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15212,"nodeType":"ExpressionStatement","src":"6668:3:68"},"nodeType":"ForStatement","src":"6625:1710:68"},{"expression":{"id":15332,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15187,"src":"8352:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15185,"id":15333,"nodeType":"Return","src":"8345:28:68"}]},"id":15335,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroOutDeltas","nameLocation":"6274:14:68","nodeType":"FunctionDefinition","parameters":{"id":15182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15173,"mutability":"mutable","name":"pool","nameLocation":"6306:4:68","nodeType":"VariableDeclaration","scope":15335,"src":"6298:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15172,"name":"address","nodeType":"ElementaryTypeName","src":"6298:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15176,"mutability":"mutable","name":"deltas","nameLocation":"6336:6:68","nodeType":"VariableDeclaration","scope":15335,"src":"6320:22:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":15174,"name":"int256","nodeType":"ElementaryTypeName","src":"6320:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15175,"nodeType":"ArrayTypeName","src":"6320:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":15179,"mutability":"mutable","name":"deltaBPTs","nameLocation":"6368:9:68","nodeType":"VariableDeclaration","scope":15335,"src":"6352:25:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":15177,"name":"int256","nodeType":"ElementaryTypeName","src":"6352:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15178,"nodeType":"ArrayTypeName","src":"6352:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":15181,"mutability":"mutable","name":"sender","nameLocation":"6395:6:68","nodeType":"VariableDeclaration","scope":15335,"src":"6387:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15180,"name":"address","nodeType":"ElementaryTypeName","src":"6387:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6288:119:68"},"returnParameters":{"id":15185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15184,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15335,"src":"6426:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15183,"name":"uint256","nodeType":"ElementaryTypeName","src":"6426:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6425:9:68"},"scope":15442,"src":"6265:2115:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15387,"nodeType":"Block","src":"8576:232:68","statements":[{"assignments":[15344],"declarations":[{"constant":false,"id":15344,"mutability":"mutable","name":"min","nameLocation":"8593:3:68","nodeType":"VariableDeclaration","scope":15387,"src":"8586:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15343,"name":"int256","nodeType":"ElementaryTypeName","src":"8586:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":15350,"initialValue":{"expression":{"arguments":[{"id":15347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8604:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":15346,"name":"int256","nodeType":"ElementaryTypeName","src":"8604:6:68","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":15345,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8599:4:68","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8599:12:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":15349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8612:3:68","memberName":"max","nodeType":"MemberAccess","src":"8599:16:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"8586:29:68"},{"body":{"id":15385,"nodeType":"Block","src":"8668:134:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15362,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15338,"src":"8686:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15364,"indexExpression":{"id":15363,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"8692:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8686:8:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8697:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8686:12:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15367,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15338,"src":"8702:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15369,"indexExpression":{"id":15368,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"8708:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8702:8:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15370,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15344,"src":"8713:3:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8702:14:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8686:30:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15384,"nodeType":"IfStatement","src":"8682:110:68","trueBody":{"id":15383,"nodeType":"Block","src":"8718:74:68","statements":[{"expression":{"id":15377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15373,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15344,"src":"8736:3:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15374,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15338,"src":"8742:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15376,"indexExpression":{"id":15375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"8748:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8742:8:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8736:14:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15378,"nodeType":"ExpressionStatement","src":"8736:14:68"},{"expression":{"id":15381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15379,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15341,"src":"8768:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15380,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"8776:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8768:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15382,"nodeType":"ExpressionStatement","src":"8768:9:68"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15355,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"8645:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15356,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15338,"src":"8649:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8655:6:68","memberName":"length","nodeType":"MemberAccess","src":"8649:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8645:16:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15386,"initializationExpression":{"assignments":[15352],"declarations":[{"constant":false,"id":15352,"mutability":"mutable","name":"i","nameLocation":"8638:1:68","nodeType":"VariableDeclaration","scope":15386,"src":"8630:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15351,"name":"uint256","nodeType":"ElementaryTypeName","src":"8630:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15354,"initialValue":{"hexValue":"30","id":15353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8642:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8630:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8663:3:68","subExpression":{"id":15359,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"8663:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15361,"nodeType":"ExpressionStatement","src":"8663:3:68"},"nodeType":"ForStatement","src":"8625:177:68"}]},"id":15388,"implemented":true,"kind":"function","modifiers":[],"name":"_minPositiveIndex","nameLocation":"8497:17:68","nodeType":"FunctionDefinition","parameters":{"id":15339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15338,"mutability":"mutable","name":"array","nameLocation":"8531:5:68","nodeType":"VariableDeclaration","scope":15388,"src":"8515:21:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":15336,"name":"int256","nodeType":"ElementaryTypeName","src":"8515:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15337,"nodeType":"ArrayTypeName","src":"8515:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"8514:23:68"},"returnParameters":{"id":15342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15341,"mutability":"mutable","name":"index","nameLocation":"8569:5:68","nodeType":"VariableDeclaration","scope":15388,"src":"8561:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15340,"name":"uint256","nodeType":"ElementaryTypeName","src":"8561:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8560:15:68"},"scope":15442,"src":"8488:320:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15440,"nodeType":"Block","src":"9003:232:68","statements":[{"assignments":[15397],"declarations":[{"constant":false,"id":15397,"mutability":"mutable","name":"max","nameLocation":"9020:3:68","nodeType":"VariableDeclaration","scope":15440,"src":"9013:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15396,"name":"int256","nodeType":"ElementaryTypeName","src":"9013:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":15403,"initialValue":{"expression":{"arguments":[{"id":15400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9031:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":15399,"name":"int256","nodeType":"ElementaryTypeName","src":"9031:6:68","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":15398,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9026:4:68","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9026:12:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":15402,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9039:3:68","memberName":"min","nodeType":"MemberAccess","src":"9026:16:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9013:29:68"},{"body":{"id":15438,"nodeType":"Block","src":"9095:134:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15415,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15391,"src":"9113:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15417,"indexExpression":{"id":15416,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15405,"src":"9119:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9113:8:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":15418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9124:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9113:12:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15420,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15391,"src":"9129:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15422,"indexExpression":{"id":15421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15405,"src":"9135:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9129:8:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15423,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15397,"src":"9140:3:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9129:14:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9113:30:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15437,"nodeType":"IfStatement","src":"9109:110:68","trueBody":{"id":15436,"nodeType":"Block","src":"9145:74:68","statements":[{"expression":{"id":15430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15426,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15397,"src":"9163:3:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15427,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15391,"src":"9169:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15429,"indexExpression":{"id":15428,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15405,"src":"9175:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9169:8:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9163:14:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15431,"nodeType":"ExpressionStatement","src":"9163:14:68"},{"expression":{"id":15434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15432,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15394,"src":"9195:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15433,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15405,"src":"9203:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9195:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15435,"nodeType":"ExpressionStatement","src":"9195:9:68"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15408,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15405,"src":"9072:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15409,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15391,"src":"9076:5:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":15410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9082:6:68","memberName":"length","nodeType":"MemberAccess","src":"9076:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9072:16:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15439,"initializationExpression":{"assignments":[15405],"declarations":[{"constant":false,"id":15405,"mutability":"mutable","name":"i","nameLocation":"9065:1:68","nodeType":"VariableDeclaration","scope":15439,"src":"9057:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15404,"name":"uint256","nodeType":"ElementaryTypeName","src":"9057:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15407,"initialValue":{"hexValue":"30","id":15406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9069:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9057:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9090:3:68","subExpression":{"id":15412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15405,"src":"9090:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15414,"nodeType":"ExpressionStatement","src":"9090:3:68"},"nodeType":"ForStatement","src":"9052:177:68"}]},"id":15441,"implemented":true,"kind":"function","modifiers":[],"name":"_maxNegativeIndex","nameLocation":"8924:17:68","nodeType":"FunctionDefinition","parameters":{"id":15392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15391,"mutability":"mutable","name":"array","nameLocation":"8958:5:68","nodeType":"VariableDeclaration","scope":15441,"src":"8942:21:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":15389,"name":"int256","nodeType":"ElementaryTypeName","src":"8942:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":15390,"nodeType":"ArrayTypeName","src":"8942:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"8941:23:68"},"returnParameters":{"id":15395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15394,"mutability":"mutable","name":"index","nameLocation":"8996:5:68","nodeType":"VariableDeclaration","scope":15441,"src":"8988:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15393,"name":"uint256","nodeType":"ElementaryTypeName","src":"8988:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8987:15:68"},"scope":15442,"src":"8915:320:68","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":15443,"src":"537:8700:68","usedErrors":[4500,4503,9997,10000,10286,10298,13208],"usedEvents":[]}],"src":"46:9192:68"},"id":68},"contracts/ProtocolFeeHelper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeController":[1673],"IProtocolFeeHelper":[738],"IVault":[2319],"PoolHelperCommon":[14620],"ProtocolFeeHelper":[15531]},"id":15532,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":15444,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:69"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","id":15446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15532,"sourceUnit":739,"src":"72:116:69","symbolAliases":[{"foreign":{"id":15445,"name":"IProtocolFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":738,"src":"81:18:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":15448,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15532,"sourceUnit":1674,"src":"189:113:69","symbolAliases":[{"foreign":{"id":15447,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"198:22:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":15450,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15532,"sourceUnit":2320,"src":"303:81:69","symbolAliases":[{"foreign":{"id":15449,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"312:6:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":15452,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15532,"sourceUnit":14621,"src":"386:58:69","symbolAliases":[{"foreign":{"id":15451,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14620,"src":"395:16:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":15453,"name":"IProtocolFeeHelper","nameLocations":["476:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":738,"src":"476:18:69"},"id":15454,"nodeType":"InheritanceSpecifier","src":"476:18:69"},{"baseName":{"id":15455,"name":"PoolHelperCommon","nameLocations":["496:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":14620,"src":"496:16:69"},"id":15456,"nodeType":"InheritanceSpecifier","src":"496:16:69"}],"canonicalName":"ProtocolFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":15531,"linearizedBaseContracts":[15531,14620,8623,6869,4159,81,635,738],"name":"ProtocolFeeHelper","nameLocation":"455:17:69","nodeType":"ContractDefinition","nodes":[{"body":{"id":15465,"nodeType":"Block","src":"556:50:69","statements":[{"expression":{"arguments":[{"id":15461,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15458,"src":"583:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15460,"name":"_ensurePoolAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14612,"src":"566:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":15462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"566:22:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15463,"nodeType":"ExpressionStatement","src":"566:22:69"},{"id":15464,"nodeType":"PlaceholderStatement","src":"598:1:69"}]},"id":15466,"name":"withAddedPool","nameLocation":"528:13:69","nodeType":"ModifierDefinition","parameters":{"id":15459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15458,"mutability":"mutable","name":"pool","nameLocation":"550:4:69","nodeType":"VariableDeclaration","scope":15466,"src":"542:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15457,"name":"address","nodeType":"ElementaryTypeName","src":"542:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"541:14:69"},"src":"519:87:69","virtual":false,"visibility":"internal"},{"body":{"id":15475,"nodeType":"Block","src":"662:64:69","statements":[]},"id":15476,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":15472,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15469,"src":"655:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":15473,"kind":"baseConstructorSpecifier","modifierName":{"id":15471,"name":"PoolHelperCommon","nameLocations":["638:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":14620,"src":"638:16:69"},"nodeType":"ModifierInvocation","src":"638:23:69"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":15470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15469,"mutability":"mutable","name":"vault","nameLocation":"631:5:69","nodeType":"VariableDeclaration","scope":15476,"src":"624:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":15468,"nodeType":"UserDefinedTypeName","pathNode":{"id":15467,"name":"IVault","nameLocations":["624:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"624:6:69"},"referencedDeclaration":2319,"src":"624:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"}],"src":"623:14:69"},"returnParameters":{"id":15474,"nodeType":"ParameterList","parameters":[],"src":"662:0:69"},"scope":15531,"src":"612:114:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[729],"body":{"id":15496,"nodeType":"Block","src":"1137:109:69","statements":[{"expression":{"arguments":[{"id":15492,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15479,"src":"1204:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15493,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15481,"src":"1210:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15489,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15530,"src":"1147:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":15490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1147:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":15491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1175:28:69","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1615,"src":"1147:56:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1147:92:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15495,"nodeType":"ExpressionStatement","src":"1147:92:69"}]},"documentation":{"id":15477,"nodeType":"StructuredDocumentation","src":"944:34:69","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"fd267f39","id":15497,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15484,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15479,"src":"1118:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15485,"kind":"modifierInvocation","modifierName":{"id":15483,"name":"withAddedPool","nameLocations":["1104:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":15466,"src":"1104:13:69"},"nodeType":"ModifierInvocation","src":"1104:19:69"},{"id":15487,"kind":"modifierInvocation","modifierName":{"id":15486,"name":"authenticate","nameLocations":["1124:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"1124:12:69"},"nodeType":"ModifierInvocation","src":"1124:12:69"}],"name":"setProtocolSwapFeePercentage","nameLocation":"992:28:69","nodeType":"FunctionDefinition","parameters":{"id":15482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15479,"mutability":"mutable","name":"pool","nameLocation":"1038:4:69","nodeType":"VariableDeclaration","scope":15497,"src":"1030:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15478,"name":"address","nodeType":"ElementaryTypeName","src":"1030:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15481,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1060:28:69","nodeType":"VariableDeclaration","scope":15497,"src":"1052:36:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15480,"name":"uint256","nodeType":"ElementaryTypeName","src":"1052:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1020:74:69"},"returnParameters":{"id":15488,"nodeType":"ParameterList","parameters":[],"src":"1137:0:69"},"scope":15531,"src":"983:263:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[737],"body":{"id":15517,"nodeType":"Block","src":"1447:111:69","statements":[{"expression":{"arguments":[{"id":15513,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"1515:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15514,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"1521:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15510,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15530,"src":"1457:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":15511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1457:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":15512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1485:29:69","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1623,"src":"1457:57:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1457:94:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15516,"nodeType":"ExpressionStatement","src":"1457:94:69"}]},"documentation":{"id":15498,"nodeType":"StructuredDocumentation","src":"1252:34:69","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"abaa3356","id":15518,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15505,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"1428:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15506,"kind":"modifierInvocation","modifierName":{"id":15504,"name":"withAddedPool","nameLocations":["1414:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":15466,"src":"1414:13:69"},"nodeType":"ModifierInvocation","src":"1414:19:69"},{"id":15508,"kind":"modifierInvocation","modifierName":{"id":15507,"name":"authenticate","nameLocations":["1434:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"1434:12:69"},"nodeType":"ModifierInvocation","src":"1434:12:69"}],"name":"setProtocolYieldFeePercentage","nameLocation":"1300:29:69","nodeType":"FunctionDefinition","parameters":{"id":15503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15500,"mutability":"mutable","name":"pool","nameLocation":"1347:4:69","nodeType":"VariableDeclaration","scope":15518,"src":"1339:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15499,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15502,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1369:29:69","nodeType":"VariableDeclaration","scope":15518,"src":"1361:37:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15501,"name":"uint256","nodeType":"ElementaryTypeName","src":"1361:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1329:75:69"},"returnParameters":{"id":15509,"nodeType":"ParameterList","parameters":[],"src":"1447:0:69"},"scope":15531,"src":"1291:267:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15529,"nodeType":"Block","src":"1990:61:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15524,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"2007:8:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":15525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2007:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2018:24:69","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3568,"src":"2007:35:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":15527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2007:37:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":15523,"id":15528,"nodeType":"Return","src":"2000:44:69"}]},"id":15530,"implemented":true,"kind":"function","modifiers":[],"name":"_getProtocolFeeController","nameLocation":"1915:25:69","nodeType":"FunctionDefinition","parameters":{"id":15519,"nodeType":"ParameterList","parameters":[],"src":"1940:2:69"},"returnParameters":{"id":15523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15530,"src":"1966:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":15521,"nodeType":"UserDefinedTypeName","pathNode":{"id":15520,"name":"IProtocolFeeController","nameLocations":["1966:22:69"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"1966:22:69"},"referencedDeclaration":1673,"src":"1966:22:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1965:24:69"},"scope":15531,"src":"1906:145:69","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":15532,"src":"446:1607:69","usedErrors":[72,587,592,595,2631,6689],"usedEvents":[577,582]}],"src":"46:2008:69"},"id":69},"contracts/ProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"contracts/ProtocolFeePercentagesProvider.sol","exportedSymbols":{"ContractType":[110],"FEE_SCALING_FACTOR":[4076],"IBalancerContractRegistry":[279],"IBasePoolFactory":[1133],"IProtocolFeeController":[1673],"IProtocolFeePercentagesProvider":[1752],"IVault":[2319],"IVaultErrors":[2976],"ProtocolFeeController":[8564],"ProtocolFeePercentagesProvider":[15894],"SafeCast":[12026],"SingletonAuthentication":[8623]},"id":15895,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":15533,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:70"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":15535,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":12027,"src":"72:75:70","symbolAliases":[{"foreign":{"id":15534,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"81:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":15537,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":1674,"src":"149:113:70","symbolAliases":[{"foreign":{"id":15536,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"158:22:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":15539,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":1134,"src":"263:101:70","symbolAliases":[{"foreign":{"id":15538,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"272:16:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":15541,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":4080,"src":"365:97:70","symbolAliases":[{"foreign":{"id":15540,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"374:18:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","id":15543,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":1753,"src":"463:135:70","symbolAliases":[{"foreign":{"id":15542,"name":"IProtocolFeePercentagesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1752,"src":"476:31:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":15546,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":280,"src":"599:152:70","symbolAliases":[{"foreign":{"id":15544,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":279,"src":"612:25:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":15545,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"643:12:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":15548,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":2977,"src":"752:93:70","symbolAliases":[{"foreign":{"id":15547,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"761:12:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":15550,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":2320,"src":"846:81:70","symbolAliases":[{"foreign":{"id":15549,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"855:6:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":15552,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":8624,"src":"929:104:70","symbolAliases":[{"foreign":{"id":15551,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"938:23:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":15554,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15895,"sourceUnit":8565,"src":"1034:100:70","symbolAliases":[{"foreign":{"id":15553,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8564,"src":"1043:21:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":15555,"name":"IProtocolFeePercentagesProvider","nameLocations":["1179:31:70"],"nodeType":"IdentifierPath","referencedDeclaration":1752,"src":"1179:31:70"},"id":15556,"nodeType":"InheritanceSpecifier","src":"1179:31:70"},{"baseName":{"id":15557,"name":"SingletonAuthentication","nameLocations":["1212:23:70"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"1212:23:70"},"id":15558,"nodeType":"InheritanceSpecifier","src":"1212:23:70"}],"canonicalName":"ProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":15894,"linearizedBaseContracts":[15894,8623,6869,4159,81,1752],"name":"ProtocolFeePercentagesProvider","nameLocation":"1145:30:70","nodeType":"ContractDefinition","nodes":[{"global":false,"id":15561,"libraryName":{"id":15559,"name":"SafeCast","nameLocations":["1248:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12026,"src":"1248:8:70"},"nodeType":"UsingForDirective","src":"1242:27:70","typeName":{"id":15560,"name":"uint256","nodeType":"ElementaryTypeName","src":"1261:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"canonicalName":"ProtocolFeePercentagesProvider.FactoryProtocolFees","documentation":{"id":15562,"nodeType":"StructuredDocumentation","src":"1275:425:70","text":" @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n @param protocolSwapFee The protocol swap fee\n @param protocolYieldFee The protocol yield fee\n @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)"},"id":15569,"members":[{"constant":false,"id":15564,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"1749:25:70","nodeType":"VariableDeclaration","scope":15569,"src":"1742:32:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":15563,"name":"uint64","nodeType":"ElementaryTypeName","src":"1742:6:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":15566,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"1791:26:70","nodeType":"VariableDeclaration","scope":15569,"src":"1784:33:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":15565,"name":"uint64","nodeType":"ElementaryTypeName","src":"1784:6:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":15568,"mutability":"mutable","name":"areFactoryFeesSet","nameLocation":"1832:17:70","nodeType":"VariableDeclaration","scope":15569,"src":"1827:22:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15567,"name":"bool","nodeType":"ElementaryTypeName","src":"1827:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"FactoryProtocolFees","nameLocation":"1712:19:70","nodeType":"StructDefinition","scope":15894,"src":"1705:151:70","visibility":"public"},{"constant":false,"id":15572,"mutability":"immutable","name":"_trustedContractRegistry","nameLocation":"1906:24:70","nodeType":"VariableDeclaration","scope":15894,"src":"1862:68:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":15571,"nodeType":"UserDefinedTypeName","pathNode":{"id":15570,"name":"IBalancerContractRegistry","nameLocations":["1862:25:70"],"nodeType":"IdentifierPath","referencedDeclaration":279,"src":"1862:25:70"},"referencedDeclaration":279,"src":"1862:25:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"visibility":"private"},{"constant":false,"id":15575,"mutability":"immutable","name":"_protocolFeeController","nameLocation":"1977:22:70","nodeType":"VariableDeclaration","scope":15894,"src":"1936:63:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":15574,"nodeType":"UserDefinedTypeName","pathNode":{"id":15573,"name":"IProtocolFeeController","nameLocations":["1936:22:70"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"1936:22:70"},"referencedDeclaration":1673,"src":"1936:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"private"},{"constant":false,"id":15577,"mutability":"immutable","name":"_maxProtocolSwapFeePercentage","nameLocation":"2032:29:70","nodeType":"VariableDeclaration","scope":15894,"src":"2006:55:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15576,"name":"uint256","nodeType":"ElementaryTypeName","src":"2006:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":15579,"mutability":"immutable","name":"_maxProtocolYieldFeePercentage","nameLocation":"2093:30:70","nodeType":"VariableDeclaration","scope":15894,"src":"2067:56:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15578,"name":"uint256","nodeType":"ElementaryTypeName","src":"2067:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":15585,"mutability":"mutable","name":"_factoryDefaultFeePercentages","nameLocation":"2233:29:70","nodeType":"VariableDeclaration","scope":15894,"src":"2176:86:70","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1133_$_t_struct$_FactoryProtocolFees_$15569_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"typeName":{"id":15584,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":15581,"nodeType":"UserDefinedTypeName","pathNode":{"id":15580,"name":"IBasePoolFactory","nameLocations":["2184:16:70"],"nodeType":"IdentifierPath","referencedDeclaration":1133,"src":"2184:16:70"},"referencedDeclaration":1133,"src":"2184:16:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1133","typeString":"contract IBasePoolFactory"}},"nodeType":"Mapping","src":"2176:48:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1133_$_t_struct$_FactoryProtocolFees_$15569_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":15583,"nodeType":"UserDefinedTypeName","pathNode":{"id":15582,"name":"FactoryProtocolFees","nameLocations":["2204:19:70"],"nodeType":"IdentifierPath","referencedDeclaration":15569,"src":"2204:19:70"},"referencedDeclaration":15569,"src":"2204:19:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}}},"visibility":"private"},{"body":{"id":15634,"nodeType":"Block","src":"2377:576:70","statements":[{"assignments":[15599],"declarations":[{"constant":false,"id":15599,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2410:21:70","nodeType":"VariableDeclaration","scope":15634,"src":"2387:44:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":15598,"nodeType":"UserDefinedTypeName","pathNode":{"id":15597,"name":"IProtocolFeeController","nameLocations":["2387:22:70"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"2387:22:70"},"referencedDeclaration":1673,"src":"2387:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":15603,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15600,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"2434:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":15601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2440:24:70","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3568,"src":"2434:30:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":15602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:32:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"2387:79:70"},{"expression":{"id":15606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15604,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15575,"src":"2477:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15605,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"2502:21:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"src":"2477:46:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":15607,"nodeType":"ExpressionStatement","src":"2477:46:70"},{"expression":{"id":15610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15608,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"2533:24:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15609,"name":"trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15591,"src":"2560:23:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"src":"2533:50:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"id":15611,"nodeType":"ExpressionStatement","src":"2533:50:70"},{"expression":{"id":15621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15612,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15577,"src":"2668:29:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":15616,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"2730:21:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}],"id":15615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2722:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15614,"name":"address","nodeType":"ElementaryTypeName","src":"2722:7:70","typeDescriptions":{}}},"id":15617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2722:30:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15613,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8564,"src":"2700:21:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$8564_$","typeString":"type(contract ProtocolFeeController)"}},"id":15618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:53:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$8564","typeString":"contract ProtocolFeeController"}},"id":15619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2767:32:70","memberName":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":6925,"src":"2700:99:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":15620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:101:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2668:133:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15622,"nodeType":"ExpressionStatement","src":"2668:133:70"},{"expression":{"id":15632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15623,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15579,"src":"2811:30:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":15627,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"2874:21:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}],"id":15626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2866:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15625,"name":"address","nodeType":"ElementaryTypeName","src":"2866:7:70","typeDescriptions":{}}},"id":15628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2866:30:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15624,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8564,"src":"2844:21:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$8564_$","typeString":"type(contract ProtocolFeeController)"}},"id":15629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:53:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$8564","typeString":"contract ProtocolFeeController"}},"id":15630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2911:33:70","memberName":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":6928,"src":"2844:100:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":15631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:102:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2811:135:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15633,"nodeType":"ExpressionStatement","src":"2811:135:70"}]},"id":15635,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":15594,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15588,"src":"2370:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":15595,"kind":"baseConstructorSpecifier","modifierName":{"id":15593,"name":"SingletonAuthentication","nameLocations":["2346:23:70"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"2346:23:70"},"nodeType":"ModifierInvocation","src":"2346:30:70"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":15592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15588,"mutability":"mutable","name":"vault","nameLocation":"2288:5:70","nodeType":"VariableDeclaration","scope":15635,"src":"2281:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":15587,"nodeType":"UserDefinedTypeName","pathNode":{"id":15586,"name":"IVault","nameLocations":["2281:6:70"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"2281:6:70"},"referencedDeclaration":2319,"src":"2281:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":15591,"mutability":"mutable","name":"trustedContractRegistry","nameLocation":"2321:23:70","nodeType":"VariableDeclaration","scope":15635,"src":"2295:49:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":15590,"nodeType":"UserDefinedTypeName","pathNode":{"id":15589,"name":"IBalancerContractRegistry","nameLocations":["2295:25:70"],"nodeType":"IdentifierPath","referencedDeclaration":279,"src":"2295:25:70"},"referencedDeclaration":279,"src":"2295:25:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2280:65:70"},"returnParameters":{"id":15596,"nodeType":"ParameterList","parameters":[],"src":"2377:0:70"},"scope":15894,"src":"2269:684:70","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1715],"body":{"id":15644,"nodeType":"Block","src":"3094:46:70","statements":[{"expression":{"id":15642,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15575,"src":"3111:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":15641,"id":15643,"nodeType":"Return","src":"3104:29:70"}]},"documentation":{"id":15636,"nodeType":"StructuredDocumentation","src":"2959:47:70","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"85f2dbd4","id":15645,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"3020:24:70","nodeType":"FunctionDefinition","parameters":{"id":15637,"nodeType":"ParameterList","parameters":[],"src":"3044:2:70"},"returnParameters":{"id":15641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15640,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15645,"src":"3070:22:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":15639,"nodeType":"UserDefinedTypeName","pathNode":{"id":15638,"name":"IProtocolFeeController","nameLocations":["3070:22:70"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"3070:22:70"},"referencedDeclaration":1673,"src":"3070:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3069:24:70"},"scope":15894,"src":"3011:129:70","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1722],"body":{"id":15654,"nodeType":"Block","src":"3287:48:70","statements":[{"expression":{"id":15652,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"3304:24:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"functionReturnParameters":15651,"id":15653,"nodeType":"Return","src":"3297:31:70"}]},"documentation":{"id":15646,"nodeType":"StructuredDocumentation","src":"3146:47:70","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"deb27a7a","id":15655,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"3207:27:70","nodeType":"FunctionDefinition","parameters":{"id":15647,"nodeType":"ParameterList","parameters":[],"src":"3234:2:70"},"returnParameters":{"id":15651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15655,"src":"3260:25:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":15649,"nodeType":"UserDefinedTypeName","pathNode":{"id":15648,"name":"IBalancerContractRegistry","nameLocations":["3260:25:70"],"nodeType":"IdentifierPath","referencedDeclaration":279,"src":"3260:25:70"},"referencedDeclaration":279,"src":"3260:25:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"3259:27:70"},"scope":15894,"src":"3198:137:70","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1732],"body":{"id":15682,"nodeType":"Block","src":"3568:245:70","statements":[{"assignments":[15667],"declarations":[{"constant":false,"id":15667,"mutability":"mutable","name":"factoryFees","nameLocation":"3605:11:70","nodeType":"VariableDeclaration","scope":15682,"src":"3578:38:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":15666,"nodeType":"UserDefinedTypeName","pathNode":{"id":15665,"name":"FactoryProtocolFees","nameLocations":["3578:19:70"],"nodeType":"IdentifierPath","referencedDeclaration":15569,"src":"3578:19:70"},"referencedDeclaration":15569,"src":"3578:19:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":15671,"initialValue":{"arguments":[{"id":15669,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15658,"src":"3645:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15668,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"3619:25:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$15569_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":15670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"3578:75:70"},{"expression":{"id":15675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15672,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15661,"src":"3664:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15673,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"3692:11:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":15674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3704:25:70","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":15564,"src":"3692:37:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3664:65:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15676,"nodeType":"ExpressionStatement","src":"3664:65:70"},{"expression":{"id":15680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15677,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15663,"src":"3739:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15678,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"3768:11:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":15679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3780:26:70","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":15566,"src":"3768:38:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3739:67:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15681,"nodeType":"ExpressionStatement","src":"3739:67:70"}]},"documentation":{"id":15656,"nodeType":"StructuredDocumentation","src":"3341:47:70","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"f2c24ec8","id":15683,"implemented":true,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3402:40:70","nodeType":"FunctionDefinition","parameters":{"id":15659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15658,"mutability":"mutable","name":"factory","nameLocation":"3460:7:70","nodeType":"VariableDeclaration","scope":15683,"src":"3452:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15657,"name":"address","nodeType":"ElementaryTypeName","src":"3452:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3442:31:70"},"returnParameters":{"id":15664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15661,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3505:25:70","nodeType":"VariableDeclaration","scope":15683,"src":"3497:33:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15660,"name":"uint256","nodeType":"ElementaryTypeName","src":"3497:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15663,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3540:26:70","nodeType":"VariableDeclaration","scope":15683,"src":"3532:34:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15662,"name":"uint256","nodeType":"ElementaryTypeName","src":"3532:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3496:71:70"},"scope":15894,"src":"3393:420:70","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1742],"body":{"id":15759,"nodeType":"Block","src":"4061:1303:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15695,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15688,"src":"4180:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15696,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15577,"src":"4208:29:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4180:57:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15704,"nodeType":"IfStatement","src":"4176:152:70","trueBody":{"id":15703,"nodeType":"Block","src":"4239:89:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15698,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"4260:22:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1673_$","typeString":"type(contract IProtocolFeeController)"}},"id":15700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:32:70","memberName":"ProtocolSwapFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1454,"src":"4260:55:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4260:57:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15702,"nodeType":"RevertStatement","src":"4253:64:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15705,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"4342:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15706,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15579,"src":"4371:30:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4342:59:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15714,"nodeType":"IfStatement","src":"4338:155:70","trueBody":{"id":15713,"nodeType":"Block","src":"4403:90:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15708,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"4424:22:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1673_$","typeString":"type(contract IProtocolFeeController)"}},"id":15710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4447:33:70","memberName":"ProtocolYieldFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1457,"src":"4424:56:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:58:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15712,"nodeType":"RevertStatement","src":"4417:65:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":15717,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110,"src":"4597:12:70","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$110_$","typeString":"type(enum ContractType)"}},"id":15718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4610:12:70","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":106,"src":"4597:25:70","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"}},{"id":15719,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"4624:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$110","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15715,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15572,"src":"4547:24:70","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$279","typeString":"contract IBalancerContractRegistry"}},"id":15716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4572:24:70","memberName":"isActiveBalancerContract","nodeType":"MemberAccess","referencedDeclaration":248,"src":"4547:49:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_enum$_ContractType_$110_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view external returns (bool)"}},"id":15720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4547:85:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4636:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4547:94:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15728,"nodeType":"IfStatement","src":"4543:155:70","trueBody":{"id":15727,"nodeType":"Block","src":"4643:55:70","statements":[{"errorCall":{"arguments":[{"id":15724,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"4679:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15723,"name":"UnknownFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1696,"src":"4664:14:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":15725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4664:23:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15726,"nodeType":"RevertStatement","src":"4657:30:70"}]}},{"expression":{"arguments":[{"id":15730,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15688,"src":"4776:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15729,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15893,"src":"4754:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":15731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4754:48:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15732,"nodeType":"ExpressionStatement","src":"4754:48:70"},{"expression":{"arguments":[{"id":15734,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"4834:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15733,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15893,"src":"4812:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":15735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4812:49:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15736,"nodeType":"ExpressionStatement","src":"4812:49:70"},{"expression":{"id":15751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15737,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15585,"src":"4954:29:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1133_$_t_struct$_FactoryProtocolFees_$15569_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":15741,"indexExpression":{"arguments":[{"id":15739,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"5001:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15738,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"4984:16:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1133_$","typeString":"type(contract IBasePoolFactory)"}},"id":15740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4984:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1133","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4954:56:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15743,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15688,"src":"5074:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5100:8:70","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"5074:34:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":15745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5074:36:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15746,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"5152:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5179:8:70","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":10970,"src":"5152:35:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":15748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5152:37:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"74727565","id":15749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5222:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15742,"name":"FactoryProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15569,"src":"5013:19:70","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FactoryProtocolFees_$15569_storage_ptr_$","typeString":"type(struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage pointer)"}},"id":15750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5047:25:70","5124:26:70","5203:17:70"],"names":["protocolSwapFeePercentage","protocolYieldFeePercentage","areFactoryFeesSet"],"nodeType":"FunctionCall","src":"5013:224:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"src":"4954:283:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"id":15752,"nodeType":"ExpressionStatement","src":"4954:283:70"},{"eventCall":{"arguments":[{"id":15754,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"5294:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15755,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15688,"src":"5303:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15756,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"5330:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15753,"name":"FactorySpecificProtocolFeePercentagesSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1688,"src":"5253:40:70","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":15757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:104:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15758,"nodeType":"EmitStatement","src":"5248:109:70"}]},"documentation":{"id":15684,"nodeType":"StructuredDocumentation","src":"3819:47:70","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"00859689","id":15760,"implemented":true,"kind":"function","modifiers":[{"id":15693,"kind":"modifierInvocation","modifierName":{"id":15692,"name":"authenticate","nameLocations":["4048:12:70"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"4048:12:70"},"nodeType":"ModifierInvocation","src":"4048:12:70"}],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3880:40:70","nodeType":"FunctionDefinition","parameters":{"id":15691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15686,"mutability":"mutable","name":"factory","nameLocation":"3938:7:70","nodeType":"VariableDeclaration","scope":15760,"src":"3930:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15685,"name":"address","nodeType":"ElementaryTypeName","src":"3930:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15688,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3963:25:70","nodeType":"VariableDeclaration","scope":15760,"src":"3955:33:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15687,"name":"uint256","nodeType":"ElementaryTypeName","src":"3955:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15690,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"4006:26:70","nodeType":"VariableDeclaration","scope":15760,"src":"3998:34:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15689,"name":"uint256","nodeType":"ElementaryTypeName","src":"3998:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3920:118:70"},"returnParameters":{"id":15694,"nodeType":"ParameterList","parameters":[],"src":"4061:0:70"},"scope":15894,"src":"3871:1493:70","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1751],"body":{"id":15818,"nodeType":"Block","src":"5515:1005:70","statements":[{"assignments":[15771],"declarations":[{"constant":false,"id":15771,"mutability":"mutable","name":"factoryFees","nameLocation":"5848:11:70","nodeType":"VariableDeclaration","scope":15818,"src":"5821:38:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":15770,"nodeType":"UserDefinedTypeName","pathNode":{"id":15769,"name":"FactoryProtocolFees","nameLocations":["5821:19:70"],"nodeType":"IdentifierPath","referencedDeclaration":15569,"src":"5821:19:70"},"referencedDeclaration":15569,"src":"5821:19:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":15775,"initialValue":{"arguments":[{"id":15773,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15763,"src":"5888:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15772,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"5862:25:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$15569_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":15774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"5821:75:70"},{"body":{"id":15816,"nodeType":"Block","src":"5950:564:70","statements":[{"assignments":[15788],"declarations":[{"constant":false,"id":15788,"mutability":"mutable","name":"currentPool","nameLocation":"5972:11:70","nodeType":"VariableDeclaration","scope":15816,"src":"5964:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15787,"name":"address","nodeType":"ElementaryTypeName","src":"5964:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15792,"initialValue":{"baseExpression":{"id":15789,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15766,"src":"5986:5:70","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":15791,"indexExpression":{"id":15790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15777,"src":"5992:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5986:8:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5964:30:70"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":15797,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15788,"src":"6212:11:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":15794,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15763,"src":"6185:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15793,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"6168:16:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1133_$","typeString":"type(contract IBasePoolFactory)"}},"id":15795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1133","typeString":"contract IBasePoolFactory"}},"id":15796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6194:17:70","memberName":"isPoolFromFactory","nodeType":"MemberAccess","referencedDeclaration":1088,"src":"6168:43:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":15798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:56:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6228:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6168:65:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15807,"nodeType":"IfStatement","src":"6164:151:70","trueBody":{"id":15806,"nodeType":"Block","src":"6235:80:70","statements":[{"errorCall":{"arguments":[{"id":15802,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15788,"src":"6279:11:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15803,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15763,"src":"6292:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15801,"name":"PoolNotFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1708,"src":"6260:18:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":15804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15805,"nodeType":"RevertStatement","src":"6253:47:70"}]}},{"expression":{"arguments":[{"id":15809,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15788,"src":"6367:11:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15810,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15771,"src":"6396:11:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":15811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6408:25:70","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":15564,"src":"6396:37:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":15812,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15771,"src":"6451:11:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":15813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6463:26:70","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":15566,"src":"6451:38:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":15808,"name":"_setPoolProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15871,"src":"6329:20:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":15814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:174:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15815,"nodeType":"ExpressionStatement","src":"6329:174:70"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15780,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15777,"src":"5927:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15781,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15766,"src":"5931:5:70","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":15782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5937:6:70","memberName":"length","nodeType":"MemberAccess","src":"5931:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5927:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15817,"initializationExpression":{"assignments":[15777],"declarations":[{"constant":false,"id":15777,"mutability":"mutable","name":"i","nameLocation":"5920:1:70","nodeType":"VariableDeclaration","scope":15817,"src":"5912:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15776,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15779,"initialValue":{"hexValue":"30","id":15778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5924:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5912:13:70"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5945:3:70","subExpression":{"id":15784,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15777,"src":"5947:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15786,"nodeType":"ExpressionStatement","src":"5945:3:70"},"nodeType":"ForStatement","src":"5907:607:70"}]},"documentation":{"id":15761,"nodeType":"StructuredDocumentation","src":"5370:47:70","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"344b12d5","id":15819,"implemented":true,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"5431:33:70","nodeType":"FunctionDefinition","parameters":{"id":15767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15763,"mutability":"mutable","name":"factory","nameLocation":"5473:7:70","nodeType":"VariableDeclaration","scope":15819,"src":"5465:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15762,"name":"address","nodeType":"ElementaryTypeName","src":"5465:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15766,"mutability":"mutable","name":"pools","nameLocation":"5499:5:70","nodeType":"VariableDeclaration","scope":15819,"src":"5482:22:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":15764,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15765,"nodeType":"ArrayTypeName","src":"5482:9:70","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5464:41:70"},"returnParameters":{"id":15768,"nodeType":"ParameterList","parameters":[],"src":"5515:0:70"},"scope":15894,"src":"5422:1098:70","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15845,"nodeType":"Block","src":"6640:199:70","statements":[{"expression":{"id":15833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15827,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15825,"src":"6650:11:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15828,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15585,"src":"6664:29:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1133_$_t_struct$_FactoryProtocolFees_$15569_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":15832,"indexExpression":{"arguments":[{"id":15830,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15821,"src":"6711:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15829,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"6694:16:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1133_$","typeString":"type(contract IBasePoolFactory)"}},"id":15831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6694:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1133","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6664:56:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"src":"6650:70:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":15834,"nodeType":"ExpressionStatement","src":"6650:70:70"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15835,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15825,"src":"6735:11:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":15836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6747:17:70","memberName":"areFactoryFeesSet","nodeType":"MemberAccess","referencedDeclaration":15568,"src":"6735:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6768:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6735:38:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15844,"nodeType":"IfStatement","src":"6731:102:70","trueBody":{"id":15843,"nodeType":"Block","src":"6775:58:70","statements":[{"errorCall":{"arguments":[{"id":15840,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15821,"src":"6814:7:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15839,"name":"FactoryFeesNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1701,"src":"6796:17:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":15841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15842,"nodeType":"RevertStatement","src":"6789:33:70"}]}}]},"id":15846,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidatedProtocolFees","nameLocation":"6535:25:70","nodeType":"FunctionDefinition","parameters":{"id":15822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15821,"mutability":"mutable","name":"factory","nameLocation":"6569:7:70","nodeType":"VariableDeclaration","scope":15846,"src":"6561:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15820,"name":"address","nodeType":"ElementaryTypeName","src":"6561:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6560:17:70"},"returnParameters":{"id":15826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15825,"mutability":"mutable","name":"factoryFees","nameLocation":"6627:11:70","nodeType":"VariableDeclaration","scope":15846,"src":"6600:38:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":15824,"nodeType":"UserDefinedTypeName","pathNode":{"id":15823,"name":"FactoryProtocolFees","nameLocations":["6600:19:70"],"nodeType":"IdentifierPath","referencedDeclaration":15569,"src":"6600:19:70"},"referencedDeclaration":15569,"src":"6600:19:70","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$15569_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"src":"6599:40:70"},"scope":15894,"src":"6526:313:70","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":15870,"nodeType":"Block","src":"7217:197:70","statements":[{"expression":{"arguments":[{"id":15859,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15849,"src":"7279:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15860,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15851,"src":"7285:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15856,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15575,"src":"7227:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":15858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7250:28:70","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1615,"src":"7227:51:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:84:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15862,"nodeType":"ExpressionStatement","src":"7227:84:70"},{"expression":{"arguments":[{"id":15866,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15849,"src":"7374:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15867,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15853,"src":"7380:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15863,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15575,"src":"7321:22:70","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":15865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7344:29:70","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1623,"src":"7321:52:70","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7321:86:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15869,"nodeType":"ExpressionStatement","src":"7321:86:70"}]},"documentation":{"id":15847,"nodeType":"StructuredDocumentation","src":"6845:214:70","text":" @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`."},"id":15871,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolProtocolFees","nameLocation":"7073:20:70","nodeType":"FunctionDefinition","parameters":{"id":15854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15849,"mutability":"mutable","name":"pool","nameLocation":"7111:4:70","nodeType":"VariableDeclaration","scope":15871,"src":"7103:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15848,"name":"address","nodeType":"ElementaryTypeName","src":"7103:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15851,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7133:25:70","nodeType":"VariableDeclaration","scope":15871,"src":"7125:33:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15850,"name":"uint256","nodeType":"ElementaryTypeName","src":"7125:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15853,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"7176:26:70","nodeType":"VariableDeclaration","scope":15871,"src":"7168:34:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15852,"name":"uint256","nodeType":"ElementaryTypeName","src":"7168:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7093:115:70"},"returnParameters":{"id":15855,"nodeType":"ParameterList","parameters":[],"src":"7217:0:70"},"scope":15894,"src":"7064:350:70","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":15892,"nodeType":"Block","src":"7661:682:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15877,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15874,"src":"8196:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15878,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"8212:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8196:34:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15880,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8195:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15881,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4076,"src":"8234:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:57:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15883,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15874,"src":"8256:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:74:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15891,"nodeType":"IfStatement","src":"8191:146:70","trueBody":{"id":15890,"nodeType":"Block","src":"8271:66:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15885,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"8292:12:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$2976_$","typeString":"type(contract IVaultErrors)"}},"id":15887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:19:70","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":2824,"src":"8292:32:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8292:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15889,"nodeType":"RevertStatement","src":"8285:41:70"}]}}]},"documentation":{"id":15872,"nodeType":"StructuredDocumentation","src":"7420:169:70","text":" @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n deployed version of the contract."},"id":15893,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"7603:21:70","nodeType":"FunctionDefinition","parameters":{"id":15875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15874,"mutability":"mutable","name":"feePercentage","nameLocation":"7633:13:70","nodeType":"VariableDeclaration","scope":15893,"src":"7625:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15873,"name":"uint256","nodeType":"ElementaryTypeName","src":"7625:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7624:23:70"},"returnParameters":{"id":15876,"nodeType":"ParameterList","parameters":[],"src":"7661:0:70"},"scope":15894,"src":"7594:749:70","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":15895,"src":"1136:7209:70","usedErrors":[72,1454,1457,1691,1696,1701,1708,2824,6689,10281],"usedEvents":[1688]}],"src":"46:8300:70"},"id":70},"contracts/ProtocolFeeSweeper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[9632],"IERC4626":[8902],"IProtocolFeeBurner":[718],"IProtocolFeeController":[1673],"IProtocolFeeSweeper":[907],"IVault":[2319],"ProtocolFeeSweeper":[16572],"ReentrancyGuardTransient":[6346],"SafeERC20":[9984],"SingletonAuthentication":[8623]},"id":16573,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":15896,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:71"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":15898,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":9985,"src":"72:84:71","symbolAliases":[{"foreign":{"id":15897,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"81:9:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":15900,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":8903,"src":"157:75:71","symbolAliases":[{"foreign":{"id":15899,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"166:8:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":15902,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":9633,"src":"233:72:71","symbolAliases":[{"foreign":{"id":15901,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"242:6:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":15904,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":908,"src":"307:118:71","symbolAliases":[{"foreign":{"id":15903,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":907,"src":"316:19:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":15906,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":719,"src":"426:116:71","symbolAliases":[{"foreign":{"id":15905,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"435:18:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":15908,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":1674,"src":"543:113:71","symbolAliases":[{"foreign":{"id":15907,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"552:22:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":15910,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":2320,"src":"657:81:71","symbolAliases":[{"foreign":{"id":15909,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"666:6:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":15912,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":8624,"src":"740:104:71","symbolAliases":[{"foreign":{"id":15911,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"749:23:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":15914,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16573,"sourceUnit":6347,"src":"845:132:71","symbolAliases":[{"foreign":{"id":15913,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6346,"src":"858:24:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":15916,"name":"IProtocolFeeSweeper","nameLocations":["1744:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":907,"src":"1744:19:71"},"id":15917,"nodeType":"InheritanceSpecifier","src":"1744:19:71"},{"baseName":{"id":15918,"name":"SingletonAuthentication","nameLocations":["1765:23:71"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"1765:23:71"},"id":15919,"nodeType":"InheritanceSpecifier","src":"1765:23:71"},{"baseName":{"id":15920,"name":"ReentrancyGuardTransient","nameLocations":["1790:24:71"],"nodeType":"IdentifierPath","referencedDeclaration":6346,"src":"1790:24:71"},"id":15921,"nodeType":"InheritanceSpecifier","src":"1790:24:71"}],"canonicalName":"ProtocolFeeSweeper","contractDependencies":[],"contractKind":"contract","documentation":{"id":15915,"nodeType":"StructuredDocumentation","src":"979:733:71","text":" @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n a recipient address.\n An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n convert, and forward them to the final recipient."},"fullyImplemented":true,"id":16572,"linearizedBaseContracts":[16572,6346,8623,6869,4159,81,907],"name":"ProtocolFeeSweeper","nameLocation":"1722:18:71","nodeType":"ContractDefinition","nodes":[{"global":false,"id":15925,"libraryName":{"id":15922,"name":"SafeERC20","nameLocations":["1827:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":9984,"src":"1827:9:71"},"nodeType":"UsingForDirective","src":"1821:27:71","typeName":{"id":15924,"nodeType":"UserDefinedTypeName","pathNode":{"id":15923,"name":"IERC20","nameLocations":["1841:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1841:6:71"},"referencedDeclaration":9632,"src":"1841:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}},{"documentation":{"id":15926,"nodeType":"StructuredDocumentation","src":"1854:78:71","text":"@notice All pool tokens are ERC20, so this contract should not handle ETH."},"errorSelector":"f2238896","id":15928,"name":"CannotReceiveEth","nameLocation":"1943:16:71","nodeType":"ErrorDefinition","parameters":{"id":15927,"nodeType":"ParameterList","parameters":[],"src":"1959:2:71"},"src":"1937:25:71"},{"constant":false,"id":15931,"mutability":"mutable","name":"_targetToken","nameLocation":"2094:12:71","nodeType":"VariableDeclaration","scope":16572,"src":"2079:27:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":15930,"nodeType":"UserDefinedTypeName","pathNode":{"id":15929,"name":"IERC20","nameLocations":["2079:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2079:6:71"},"referencedDeclaration":9632,"src":"2079:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":15933,"mutability":"mutable","name":"_feeRecipient","nameLocation":"2186:13:71","nodeType":"VariableDeclaration","scope":16572,"src":"2170:29:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15932,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":15938,"mutability":"mutable","name":"_protocolFeeBurners","nameLocation":"2319:19:71","nodeType":"VariableDeclaration","scope":16572,"src":"2254:84:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"typeName":{"id":15937,"keyName":"feeBurner","keyNameLocation":"2281:9:71","keyType":{"id":15935,"nodeType":"UserDefinedTypeName","pathNode":{"id":15934,"name":"IProtocolFeeBurner","nameLocations":["2262:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"2262:18:71"},"referencedDeclaration":718,"src":"2262:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"nodeType":"Mapping","src":"2254:56:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"valueName":"isApproved","valueNameLocation":"2299:10:71","valueType":{"id":15936,"name":"bool","nodeType":"ElementaryTypeName","src":"2294:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"body":{"id":15950,"nodeType":"Block","src":"2481:84:71","statements":[{"expression":{"arguments":[{"arguments":[{"id":15944,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2526:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":15943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2518:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15942,"name":"address","nodeType":"ElementaryTypeName","src":"2518:7:71","typeDescriptions":{}}},"id":15945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2518:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15946,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15933,"src":"2533:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15941,"name":"_ensureAuthenticatedByRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"2491:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":15947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2491:56:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15948,"nodeType":"ExpressionStatement","src":"2491:56:71"},{"id":15949,"nodeType":"PlaceholderStatement","src":"2557:1:71"}]},"documentation":{"id":15939,"nodeType":"StructuredDocumentation","src":"2345:91:71","text":"@notice Allows calls from fee recipient or governance allowed accounts (non-exclusive)."},"id":15951,"name":"onlyFeeRecipientOrGovernance","nameLocation":"2450:28:71","nodeType":"ModifierDefinition","parameters":{"id":15940,"nodeType":"ParameterList","parameters":[],"src":"2478:2:71"},"src":"2441:124:71","virtual":false,"visibility":"internal"},{"body":{"id":15966,"nodeType":"Block","src":"2751:47:71","statements":[{"expression":{"arguments":[{"id":15963,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15956,"src":"2778:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15962,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16380,"src":"2761:16:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":15964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2761:30:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15965,"nodeType":"ExpressionStatement","src":"2761:30:71"}]},"id":15967,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":15959,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15954,"src":"2744:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":15960,"kind":"baseConstructorSpecifier","modifierName":{"id":15958,"name":"SingletonAuthentication","nameLocations":["2720:23:71"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"2720:23:71"},"nodeType":"ModifierInvocation","src":"2720:30:71"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":15957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15954,"mutability":"mutable","name":"vault","nameLocation":"2691:5:71","nodeType":"VariableDeclaration","scope":15967,"src":"2684:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":15953,"nodeType":"UserDefinedTypeName","pathNode":{"id":15952,"name":"IVault","nameLocations":["2684:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"2684:6:71"},"referencedDeclaration":2319,"src":"2684:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":15956,"mutability":"mutable","name":"feeRecipient","nameLocation":"2706:12:71","nodeType":"VariableDeclaration","scope":15967,"src":"2698:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15955,"name":"address","nodeType":"ElementaryTypeName","src":"2698:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2683:36:71"},"returnParameters":{"id":15961,"nodeType":"ParameterList","parameters":[],"src":"2751:0:71"},"scope":16572,"src":"2672:126:71","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[827],"body":{"id":15996,"nodeType":"Block","src":"3088:112:71","statements":[{"expression":{"arguments":[{"id":15988,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15970,"src":"3125:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15989,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15973,"src":"3131:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":15990,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15975,"src":"3141:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15991,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15977,"src":"3166:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15992,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15980,"src":"3176:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"66616c7365","id":15993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3187:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15987,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16215,"src":"3098:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":15994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:95:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15995,"nodeType":"ExpressionStatement","src":"3098:95:71"}]},"documentation":{"id":15968,"nodeType":"StructuredDocumentation","src":"2804:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b9746995","id":15997,"implemented":true,"kind":"function","modifiers":[{"id":15983,"kind":"modifierInvocation","modifierName":{"id":15982,"name":"nonReentrant","nameLocations":["3046:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":6301,"src":"3046:12:71"},"nodeType":"ModifierInvocation","src":"3046:12:71"},{"id":15985,"kind":"modifierInvocation","modifierName":{"id":15984,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3059:28:71"],"nodeType":"IdentifierPath","referencedDeclaration":15951,"src":"3059:28:71"},"nodeType":"ModifierInvocation","src":"3059:28:71"}],"name":"sweepProtocolFeesForToken","nameLocation":"2853:25:71","nodeType":"FunctionDefinition","parameters":{"id":15981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15970,"mutability":"mutable","name":"pool","nameLocation":"2896:4:71","nodeType":"VariableDeclaration","scope":15997,"src":"2888:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15969,"name":"address","nodeType":"ElementaryTypeName","src":"2888:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15973,"mutability":"mutable","name":"feeToken","nameLocation":"2917:8:71","nodeType":"VariableDeclaration","scope":15997,"src":"2910:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":15972,"nodeType":"UserDefinedTypeName","pathNode":{"id":15971,"name":"IERC20","nameLocations":["2910:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2910:6:71"},"referencedDeclaration":9632,"src":"2910:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":15975,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2943:23:71","nodeType":"VariableDeclaration","scope":15997,"src":"2935:31:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15974,"name":"uint256","nodeType":"ElementaryTypeName","src":"2935:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15977,"mutability":"mutable","name":"deadline","nameLocation":"2984:8:71","nodeType":"VariableDeclaration","scope":15997,"src":"2976:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15976,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15980,"mutability":"mutable","name":"feeBurner","nameLocation":"3021:9:71","nodeType":"VariableDeclaration","scope":15997,"src":"3002:28:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":15979,"nodeType":"UserDefinedTypeName","pathNode":{"id":15978,"name":"IProtocolFeeBurner","nameLocations":["3002:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"3002:18:71"},"referencedDeclaration":718,"src":"3002:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"2878:158:71"},"returnParameters":{"id":15986,"nodeType":"ParameterList","parameters":[],"src":"3088:0:71"},"scope":16572,"src":"2844:356:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[843],"body":{"id":16031,"nodeType":"Block","src":"3499:128:71","statements":[{"expression":{"arguments":[{"id":16018,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16000,"src":"3536:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":16022,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16003,"src":"3557:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}],"id":16021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3549:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16020,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:71","typeDescriptions":{}}},"id":16023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3549:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16019,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"3542:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$9632_$","typeString":"type(contract IERC20)"}},"id":16024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":16025,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16005,"src":"3569:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16026,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16007,"src":"3594:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16027,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16010,"src":"3604:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"74727565","id":16028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3615:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":16017,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16215,"src":"3509:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":16029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3509:111:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16030,"nodeType":"ExpressionStatement","src":"3509:111:71"}]},"documentation":{"id":15998,"nodeType":"StructuredDocumentation","src":"3206:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"88f6d2a4","id":16032,"implemented":true,"kind":"function","modifiers":[{"id":16013,"kind":"modifierInvocation","modifierName":{"id":16012,"name":"nonReentrant","nameLocations":["3457:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":6301,"src":"3457:12:71"},"nodeType":"ModifierInvocation","src":"3457:12:71"},{"id":16015,"kind":"modifierInvocation","modifierName":{"id":16014,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3470:28:71"],"nodeType":"IdentifierPath","referencedDeclaration":15951,"src":"3470:28:71"},"nodeType":"ModifierInvocation","src":"3470:28:71"}],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"3255:32:71","nodeType":"FunctionDefinition","parameters":{"id":16011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16000,"mutability":"mutable","name":"pool","nameLocation":"3305:4:71","nodeType":"VariableDeclaration","scope":16032,"src":"3297:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15999,"name":"address","nodeType":"ElementaryTypeName","src":"3297:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16003,"mutability":"mutable","name":"feeToken","nameLocation":"3328:8:71","nodeType":"VariableDeclaration","scope":16032,"src":"3319:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":16002,"nodeType":"UserDefinedTypeName","pathNode":{"id":16001,"name":"IERC4626","nameLocations":["3319:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"3319:8:71"},"referencedDeclaration":8902,"src":"3319:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":16005,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3354:23:71","nodeType":"VariableDeclaration","scope":16032,"src":"3346:31:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16004,"name":"uint256","nodeType":"ElementaryTypeName","src":"3346:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16007,"mutability":"mutable","name":"deadline","nameLocation":"3395:8:71","nodeType":"VariableDeclaration","scope":16032,"src":"3387:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16006,"name":"uint256","nodeType":"ElementaryTypeName","src":"3387:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16010,"mutability":"mutable","name":"feeBurner","nameLocation":"3432:9:71","nodeType":"VariableDeclaration","scope":16032,"src":"3413:28:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":16009,"nodeType":"UserDefinedTypeName","pathNode":{"id":16008,"name":"IProtocolFeeBurner","nameLocations":["3413:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"3413:18:71"},"referencedDeclaration":718,"src":"3413:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"3287:160:71"},"returnParameters":{"id":16016,"nodeType":"ParameterList","parameters":[],"src":"3499:0:71"},"scope":16572,"src":"3246:381:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16214,"nodeType":"Block","src":"3863:2820:71","statements":[{"assignments":[16050],"declarations":[{"constant":false,"id":16050,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"3878:17:71","nodeType":"VariableDeclaration","scope":16214,"src":"3873:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16049,"name":"bool","nodeType":"ElementaryTypeName","src":"3873:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":16054,"initialValue":{"arguments":[{"id":16052,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16044,"src":"3917:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16051,"name":"_getValidFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16266,"src":"3898:18:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IProtocolFeeBurner_$718_$returns$_t_bool_$","typeString":"function (contract IProtocolFeeBurner) view returns (bool)"}},"id":16053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3898:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3873:54:71"},{"assignments":[16056],"declarations":[{"constant":false,"id":16056,"mutability":"mutable","name":"existingBalance","nameLocation":"3946:15:71","nodeType":"VariableDeclaration","scope":16214,"src":"3938:23:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16055,"name":"uint256","nodeType":"ElementaryTypeName","src":"3938:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16064,"initialValue":{"arguments":[{"arguments":[{"id":16061,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3991:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3983:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16059,"name":"address","nodeType":"ElementaryTypeName","src":"3983:7:71","typeDescriptions":{}}},"id":16062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3983:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16057,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"3964:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3973:9:71","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"3964:18:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3964:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3938:59:71"},{"assignments":[16067],"declarations":[{"constant":false,"id":16067,"mutability":"mutable","name":"feeController","nameLocation":"4229:13:71","nodeType":"VariableDeclaration","scope":16214,"src":"4206:36:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":16066,"nodeType":"UserDefinedTypeName","pathNode":{"id":16065,"name":"IProtocolFeeController","nameLocations":["4206:22:71"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"4206:22:71"},"referencedDeclaration":1673,"src":"4206:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":16070,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":16068,"name":"getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16308,"src":"4245:24:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":16069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4245:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"4206:65:71"},{"expression":{"arguments":[{"id":16074,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16034,"src":"4463:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16071,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16067,"src":"4428:13:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":16073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4442:20:71","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":1485,"src":"4428:34:71","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":16075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4428:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16076,"nodeType":"ExpressionStatement","src":"4428:40:71"},{"expression":{"arguments":[{"id":16080,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16034,"src":"4615:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16083,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4629:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4621:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16081,"name":"address","nodeType":"ElementaryTypeName","src":"4621:7:71","typeDescriptions":{}}},"id":16084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4621:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16085,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"4636:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"expression":{"id":16077,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16067,"src":"4572:13:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"id":16079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4586:28:71","memberName":"withdrawProtocolFeesForToken","nodeType":"MemberAccess","referencedDeclaration":1658,"src":"4572:42:71","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$9632_$returns$__$","typeString":"function (address,address,contract IERC20) external"}},"id":16086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4572:73:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16087,"nodeType":"ExpressionStatement","src":"4572:73:71"},{"assignments":[16089],"declarations":[{"constant":false,"id":16089,"mutability":"mutable","name":"withdrawnBalance","nameLocation":"4664:16:71","nodeType":"VariableDeclaration","scope":16214,"src":"4656:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16088,"name":"uint256","nodeType":"ElementaryTypeName","src":"4656:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16099,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":16094,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4710:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4702:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16092,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:71","typeDescriptions":{}}},"id":16095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4702:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16090,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"4683:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4692:9:71","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"4683:18:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4683:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16097,"name":"existingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16056,"src":"4719:15:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4683:51:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4656:78:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16100,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"4749:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4768:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4749:20:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16213,"nodeType":"IfStatement","src":"4745:1932:71","trueBody":{"id":16212,"nodeType":"Block","src":"4771:1906:71","statements":[{"condition":{"id":16103,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16050,"src":"4789:17:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16210,"nodeType":"Block","src":"6490:177:71","statements":[{"expression":{"arguments":[{"id":16205,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16034,"src":"6619:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16206,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"6625:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":16207,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"6635:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16204,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"6601:17:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":16208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6601:51:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16209,"nodeType":"ExpressionStatement","src":"6601:51:71"}]},"id":16211,"nodeType":"IfStatement","src":"4785:1882:71","trueBody":{"id":16203,"nodeType":"Block","src":"4808:1676:71","statements":[{"assignments":[16106],"declarations":[{"constant":false,"id":16106,"mutability":"mutable","name":"targetToken","nameLocation":"4833:11:71","nodeType":"VariableDeclaration","scope":16203,"src":"4826:18:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":16105,"nodeType":"UserDefinedTypeName","pathNode":{"id":16104,"name":"IERC20","nameLocations":["4826:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"4826:6:71"},"referencedDeclaration":9632,"src":"4826:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":16108,"initialValue":{"id":16107,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15931,"src":"4847:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"4826:33:71"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"id":16111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16109,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"4986:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":16110,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16106,"src":"4998:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"4986:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16201,"nodeType":"Block","src":"5225:1245:71","statements":[{"condition":{"id":16125,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16046,"src":"5251:12:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16160,"nodeType":"IfStatement","src":"5247:296:71","trueBody":{"id":16159,"nodeType":"Block","src":"5265:278:71","statements":[{"assignments":[16128],"declarations":[{"constant":false,"id":16128,"mutability":"mutable","name":"erc4626Token","nameLocation":"5300:12:71","nodeType":"VariableDeclaration","scope":16159,"src":"5291:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"},"typeName":{"id":16127,"nodeType":"UserDefinedTypeName","pathNode":{"id":16126,"name":"IERC4626","nameLocations":["5291:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":8902,"src":"5291:8:71"},"referencedDeclaration":8902,"src":"5291:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":16135,"initialValue":{"arguments":[{"arguments":[{"id":16132,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"5332:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":16131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5324:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16130,"name":"address","nodeType":"ElementaryTypeName","src":"5324:7:71","typeDescriptions":{}}},"id":16133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5324:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16129,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"5315:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$8902_$","typeString":"type(contract IERC4626)"}},"id":16134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"5291:51:71"},{"expression":{"id":16142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16136,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"5369:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16138,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16128,"src":"5387:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"id":16139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5400:5:71","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":8771,"src":"5387:18:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":16140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5387:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16137,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"5380:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$9632_$","typeString":"type(contract IERC20)"}},"id":16141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5380:28:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"5369:39:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16143,"nodeType":"ExpressionStatement","src":"5369:39:71"},{"expression":{"id":16157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16144,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"5434:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16147,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"5473:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":16150,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5499:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5491:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16148,"name":"address","nodeType":"ElementaryTypeName","src":"5491:7:71","typeDescriptions":{}}},"id":16151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5491:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16154,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5514:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5506:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16152,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:71","typeDescriptions":{}}},"id":16155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5506:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16145,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16128,"src":"5453:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$8902","typeString":"contract IERC4626"}},"id":16146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5466:6:71","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":8901,"src":"5453:19:71","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":16156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:67:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5434:86:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16158,"nodeType":"ExpressionStatement","src":"5434:86:71"}]}},{"expression":{"arguments":[{"arguments":[{"id":16166,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16044,"src":"5828:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16165,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5820:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16164,"name":"address","nodeType":"ElementaryTypeName","src":"5820:7:71","typeDescriptions":{}}},"id":16167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5820:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16168,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"5840:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16161,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"5798:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5807:12:71","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":9892,"src":"5798:21:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":16169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5798:59:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16170,"nodeType":"ExpressionStatement","src":"5798:59:71"},{"expression":{"arguments":[{"id":16174,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16034,"src":"6019:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16175,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"6049:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":16176,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"6083:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16177,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16106,"src":"6125:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":16178,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16039,"src":"6162:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16179,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15933,"src":"6211:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16180,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16041,"src":"6250:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16171,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16044,"src":"5979:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"id":16173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5989:4:71","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":717,"src":"5979:14:71","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256) external"}},"id":16181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5979:301:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16182,"nodeType":"ExpressionStatement","src":"5979:301:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":16187,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6334:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6326:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16185,"name":"address","nodeType":"ElementaryTypeName","src":"6326:7:71","typeDescriptions":{}}},"id":16188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6326:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16191,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16044,"src":"6349:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6341:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16189,"name":"address","nodeType":"ElementaryTypeName","src":"6341:7:71","typeDescriptions":{}}},"id":16192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6341:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16183,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"6307:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6316:9:71","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":9609,"src":"6307:18:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":16193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:53:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6363:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:57:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16200,"nodeType":"IfStatement","src":"6303:149:71","trueBody":{"id":16199,"nodeType":"Block","src":"6366:86:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16196,"name":"BurnerDidNotConsumeAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":808,"src":"6399:28:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6399:30:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16198,"nodeType":"RevertStatement","src":"6392:37:71"}]}}]},"id":16202,"nodeType":"IfStatement","src":"4982:1488:71","trueBody":{"id":16124,"nodeType":"Block","src":"5011:208:71","statements":[{"condition":{"id":16112,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16046,"src":"5037:12:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16117,"nodeType":"IfStatement","src":"5033:94:71","trueBody":{"id":16116,"nodeType":"Block","src":"5051:76:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16113,"name":"UnwrapIsNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":811,"src":"5084:18:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5084:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16115,"nodeType":"RevertStatement","src":"5077:27:71"}]}},{"expression":{"arguments":[{"id":16119,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16034,"src":"5167:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16120,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16037,"src":"5173:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":16121,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"5183:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16118,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"5149:17:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":16122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5149:51:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16123,"nodeType":"ExpressionStatement","src":"5149:51:71"}]}}]}}]}}]},"id":16215,"implemented":true,"kind":"function","modifiers":[],"name":"_sweepProtocolFeesForToken","nameLocation":"3642:26:71","nodeType":"FunctionDefinition","parameters":{"id":16047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16034,"mutability":"mutable","name":"pool","nameLocation":"3686:4:71","nodeType":"VariableDeclaration","scope":16215,"src":"3678:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16033,"name":"address","nodeType":"ElementaryTypeName","src":"3678:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16037,"mutability":"mutable","name":"feeToken","nameLocation":"3707:8:71","nodeType":"VariableDeclaration","scope":16215,"src":"3700:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":16036,"nodeType":"UserDefinedTypeName","pathNode":{"id":16035,"name":"IERC20","nameLocations":["3700:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"3700:6:71"},"referencedDeclaration":9632,"src":"3700:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16039,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3733:23:71","nodeType":"VariableDeclaration","scope":16215,"src":"3725:31:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16038,"name":"uint256","nodeType":"ElementaryTypeName","src":"3725:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16041,"mutability":"mutable","name":"deadline","nameLocation":"3774:8:71","nodeType":"VariableDeclaration","scope":16215,"src":"3766:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16040,"name":"uint256","nodeType":"ElementaryTypeName","src":"3766:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16044,"mutability":"mutable","name":"feeBurner","nameLocation":"3811:9:71","nodeType":"VariableDeclaration","scope":16215,"src":"3792:28:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":16043,"nodeType":"UserDefinedTypeName","pathNode":{"id":16042,"name":"IProtocolFeeBurner","nameLocations":["3792:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"3792:18:71"},"referencedDeclaration":718,"src":"3792:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"},{"constant":false,"id":16046,"mutability":"mutable","name":"shouldUnwrap","nameLocation":"3835:12:71","nodeType":"VariableDeclaration","scope":16215,"src":"3830:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16045,"name":"bool","nodeType":"ElementaryTypeName","src":"3830:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3668:185:71"},"returnParameters":{"id":16048,"nodeType":"ParameterList","parameters":[],"src":"3863:0:71"},"scope":16572,"src":"3633:3050:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16265,"nodeType":"Block","src":"6793:572:71","statements":[{"expression":{"id":16233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16223,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16221,"src":"6803:17:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":16226,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16218,"src":"6831:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6823:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16224,"name":"address","nodeType":"ElementaryTypeName","src":"6823:7:71","typeDescriptions":{}}},"id":16227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6823:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":16230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6853:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6845:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16228,"name":"address","nodeType":"ElementaryTypeName","src":"6845:7:71","typeDescriptions":{}}},"id":16231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6845:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6823:32:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6803:52:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16234,"nodeType":"ExpressionStatement","src":"6803:52:71"},{"condition":{"id":16235,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16221,"src":"7045:17:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16264,"nodeType":"IfStatement","src":"7041:318:71","trueBody":{"id":16263,"nodeType":"Block","src":"7064:295:71","statements":[{"condition":{"baseExpression":{"id":16236,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15938,"src":"7082:19:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":16238,"indexExpression":{"id":16237,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16218,"src":"7102:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7082:30:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16261,"nodeType":"Block","src":"7261:88:71","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":16257,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16218,"src":"7323:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7315:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16255,"name":"address","nodeType":"ElementaryTypeName","src":"7315:7:71","typeDescriptions":{}}},"id":16258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7315:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16254,"name":"UnsupportedProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":795,"src":"7286:28:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":16259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7286:48:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16260,"nodeType":"RevertStatement","src":"7279:55:71"}]},"id":16262,"nodeType":"IfStatement","src":"7078:271:71","trueBody":{"id":16253,"nodeType":"Block","src":"7114:141:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":16241,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15931,"src":"7144:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":16240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7136:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16239,"name":"address","nodeType":"ElementaryTypeName","src":"7136:7:71","typeDescriptions":{}}},"id":16242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7136:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7169:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7161:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16243,"name":"address","nodeType":"ElementaryTypeName","src":"7161:7:71","typeDescriptions":{}}},"id":16246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7136:35:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16252,"nodeType":"IfStatement","src":"7132:109:71","trueBody":{"id":16251,"nodeType":"Block","src":"7173:68:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16248,"name":"InvalidTargetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":787,"src":"7202:18:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7202:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16250,"nodeType":"RevertStatement","src":"7195:27:71"}]}}]}}]}}]},"id":16266,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidFeeBurner","nameLocation":"6698:18:71","nodeType":"FunctionDefinition","parameters":{"id":16219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16218,"mutability":"mutable","name":"feeBurner","nameLocation":"6736:9:71","nodeType":"VariableDeclaration","scope":16266,"src":"6717:28:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":16217,"nodeType":"UserDefinedTypeName","pathNode":{"id":16216,"name":"IProtocolFeeBurner","nameLocations":["6717:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"6717:18:71"},"referencedDeclaration":718,"src":"6717:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"6716:30:71"},"returnParameters":{"id":16222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16221,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"6774:17:71","nodeType":"VariableDeclaration","scope":16266,"src":"6769:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16220,"name":"bool","nodeType":"ElementaryTypeName","src":"6769:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6768:24:71"},"scope":16572,"src":"6689:676:71","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16294,"nodeType":"Block","src":"7468:197:71","statements":[{"assignments":[16277],"declarations":[{"constant":false,"id":16277,"mutability":"mutable","name":"recipient","nameLocation":"7486:9:71","nodeType":"VariableDeclaration","scope":16294,"src":"7478:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16276,"name":"address","nodeType":"ElementaryTypeName","src":"7478:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16279,"initialValue":{"id":16278,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15933,"src":"7498:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7478:33:71"},{"expression":{"arguments":[{"id":16283,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16277,"src":"7543:9:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16284,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16273,"src":"7554:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16280,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16271,"src":"7521:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7530:12:71","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"7521:21:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":16285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7521:55:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16286,"nodeType":"ExpressionStatement","src":"7521:55:71"},{"eventCall":{"arguments":[{"id":16288,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16268,"src":"7609:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16289,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16271,"src":"7615:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":16290,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16273,"src":"7625:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16291,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16277,"src":"7648:9:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16287,"name":"ProtocolFeeSwept","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":771,"src":"7592:16:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,address)"}},"id":16292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7592:66:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16293,"nodeType":"EmitStatement","src":"7587:71:71"}]},"id":16295,"implemented":true,"kind":"function","modifiers":[],"name":"_transferFeeToken","nameLocation":"7380:17:71","nodeType":"FunctionDefinition","parameters":{"id":16274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16268,"mutability":"mutable","name":"pool","nameLocation":"7406:4:71","nodeType":"VariableDeclaration","scope":16295,"src":"7398:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16267,"name":"address","nodeType":"ElementaryTypeName","src":"7398:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16271,"mutability":"mutable","name":"feeToken","nameLocation":"7419:8:71","nodeType":"VariableDeclaration","scope":16295,"src":"7412:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":16270,"nodeType":"UserDefinedTypeName","pathNode":{"id":16269,"name":"IERC20","nameLocations":["7412:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"7412:6:71"},"referencedDeclaration":9632,"src":"7412:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16273,"mutability":"mutable","name":"withdrawnTokenBalance","nameLocation":"7437:21:71","nodeType":"VariableDeclaration","scope":16295,"src":"7429:29:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16272,"name":"uint256","nodeType":"ElementaryTypeName","src":"7429:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7397:62:71"},"returnParameters":{"id":16275,"nodeType":"ParameterList","parameters":[],"src":"7468:0:71"},"scope":16572,"src":"7371:294:71","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[850],"body":{"id":16307,"nodeType":"Block","src":"7792:61:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":16302,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"7809:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":16303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":16304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7820:24:71","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3568,"src":"7809:35:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1673_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":16305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:37:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":16301,"id":16306,"nodeType":"Return","src":"7802:44:71"}]},"documentation":{"id":16296,"nodeType":"StructuredDocumentation","src":"7671:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"85f2dbd4","id":16308,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"7720:24:71","nodeType":"FunctionDefinition","parameters":{"id":16297,"nodeType":"ParameterList","parameters":[],"src":"7744:2:71"},"returnParameters":{"id":16301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16300,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16308,"src":"7768:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":16299,"nodeType":"UserDefinedTypeName","pathNode":{"id":16298,"name":"IProtocolFeeController","nameLocations":["7768:22:71"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"7768:22:71"},"referencedDeclaration":1673,"src":"7768:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7767:24:71"},"scope":16572,"src":"7711:142:71","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[857],"body":{"id":16317,"nodeType":"Block","src":"7956:36:71","statements":[{"expression":{"id":16315,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15931,"src":"7973:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"functionReturnParameters":16314,"id":16316,"nodeType":"Return","src":"7966:19:71"}]},"documentation":{"id":16309,"nodeType":"StructuredDocumentation","src":"7859:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"80db0d51","id":16318,"implemented":true,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"7908:14:71","nodeType":"FunctionDefinition","parameters":{"id":16310,"nodeType":"ParameterList","parameters":[],"src":"7922:2:71"},"returnParameters":{"id":16314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16318,"src":"7948:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":16312,"nodeType":"UserDefinedTypeName","pathNode":{"id":16311,"name":"IERC20","nameLocations":["7948:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"7948:6:71"},"referencedDeclaration":9632,"src":"7948:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7947:8:71"},"scope":16572,"src":"7899:93:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[863],"body":{"id":16326,"nodeType":"Block","src":"8097:37:71","statements":[{"expression":{"id":16324,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15933,"src":"8114:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16323,"id":16325,"nodeType":"Return","src":"8107:20:71"}]},"documentation":{"id":16319,"nodeType":"StructuredDocumentation","src":"7998:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"4ccb20c0","id":16327,"implemented":true,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"8047:15:71","nodeType":"FunctionDefinition","parameters":{"id":16320,"nodeType":"ParameterList","parameters":[],"src":"8062:2:71"},"returnParameters":{"id":16323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16322,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16327,"src":"8088:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16321,"name":"address","nodeType":"ElementaryTypeName","src":"8088:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8087:9:71"},"scope":16572,"src":"8038:96:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[871],"body":{"id":16341,"nodeType":"Block","src":"8273:82:71","statements":[{"expression":{"baseExpression":{"id":16335,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15938,"src":"8290:19:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":16339,"indexExpression":{"arguments":[{"id":16337,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"8329:17:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16336,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"8310:18:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeBurner_$718_$","typeString":"type(contract IProtocolFeeBurner)"}},"id":16338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8310:37:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8290:58:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16334,"id":16340,"nodeType":"Return","src":"8283:65:71"}]},"documentation":{"id":16328,"nodeType":"StructuredDocumentation","src":"8140:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"9c5cee9b","id":16342,"implemented":true,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"8189:27:71","nodeType":"FunctionDefinition","parameters":{"id":16331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16330,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8225:17:71","nodeType":"VariableDeclaration","scope":16342,"src":"8217:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16329,"name":"address","nodeType":"ElementaryTypeName","src":"8217:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8216:27:71"},"returnParameters":{"id":16334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16342,"src":"8267:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16332,"name":"bool","nodeType":"ElementaryTypeName","src":"8267:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8266:6:71"},"scope":16572,"src":"8180:175:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[877],"body":{"id":16354,"nodeType":"Block","src":"8704:47:71","statements":[{"expression":{"arguments":[{"id":16351,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16345,"src":"8731:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16350,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16380,"src":"8714:16:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":16352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:30:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16353,"nodeType":"ExpressionStatement","src":"8714:30:71"}]},"documentation":{"id":16343,"nodeType":"StructuredDocumentation","src":"8579:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e74b981b","id":16355,"implemented":true,"kind":"function","modifiers":[{"id":16348,"kind":"modifierInvocation","modifierName":{"id":16347,"name":"onlyFeeRecipientOrGovernance","nameLocations":["8675:28:71"],"nodeType":"IdentifierPath","referencedDeclaration":15951,"src":"8675:28:71"},"nodeType":"ModifierInvocation","src":"8675:28:71"}],"name":"setFeeRecipient","nameLocation":"8628:15:71","nodeType":"FunctionDefinition","parameters":{"id":16346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16345,"mutability":"mutable","name":"feeRecipient","nameLocation":"8652:12:71","nodeType":"VariableDeclaration","scope":16355,"src":"8644:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16344,"name":"address","nodeType":"ElementaryTypeName","src":"8644:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8643:22:71"},"returnParameters":{"id":16349,"nodeType":"ParameterList","parameters":[],"src":"8704:0:71"},"scope":16572,"src":"8619:132:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16379,"nodeType":"Block","src":"8814:707:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16360,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16357,"src":"9350:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9374:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9366:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16361,"name":"address","nodeType":"ElementaryTypeName","src":"9366:7:71","typeDescriptions":{}}},"id":16364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9350:26:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16370,"nodeType":"IfStatement","src":"9346:85:71","trueBody":{"id":16369,"nodeType":"Block","src":"9378:53:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16366,"name":"InvalidFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":784,"src":"9399:19:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9399:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16368,"nodeType":"RevertStatement","src":"9392:28:71"}]}},{"expression":{"id":16373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16371,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15933,"src":"9441:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16372,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16357,"src":"9457:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9441:28:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16374,"nodeType":"ExpressionStatement","src":"9441:28:71"},{"eventCall":{"arguments":[{"id":16376,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16357,"src":"9501:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16375,"name":"FeeRecipientSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":759,"src":"9485:15:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":16377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9485:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16378,"nodeType":"EmitStatement","src":"9480:34:71"}]},"id":16380,"implemented":true,"kind":"function","modifiers":[],"name":"_setFeeRecipient","nameLocation":"8766:16:71","nodeType":"FunctionDefinition","parameters":{"id":16358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16357,"mutability":"mutable","name":"feeRecipient","nameLocation":"8791:12:71","nodeType":"VariableDeclaration","scope":16380,"src":"8783:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16356,"name":"address","nodeType":"ElementaryTypeName","src":"8783:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8782:22:71"},"returnParameters":{"id":16359,"nodeType":"ParameterList","parameters":[],"src":"8814:0:71"},"scope":16572,"src":"8757:764:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[884],"body":{"id":16397,"nodeType":"Block","src":"9649:86:71","statements":[{"expression":{"id":16391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16389,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15931,"src":"9659:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16390,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16384,"src":"9674:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"src":"9659:26:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16392,"nodeType":"ExpressionStatement","src":"9659:26:71"},{"eventCall":{"arguments":[{"id":16394,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16384,"src":"9716:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":16393,"name":"TargetTokenSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":754,"src":"9701:14:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$9632_$returns$__$","typeString":"function (contract IERC20)"}},"id":16395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9701:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16396,"nodeType":"EmitStatement","src":"9696:32:71"}]},"documentation":{"id":16381,"nodeType":"StructuredDocumentation","src":"9527:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"1b66cb00","id":16398,"implemented":true,"kind":"function","modifiers":[{"id":16387,"kind":"modifierInvocation","modifierName":{"id":16386,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9620:28:71"],"nodeType":"IdentifierPath","referencedDeclaration":15951,"src":"9620:28:71"},"nodeType":"ModifierInvocation","src":"9620:28:71"}],"name":"setTargetToken","nameLocation":"9576:14:71","nodeType":"FunctionDefinition","parameters":{"id":16385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16384,"mutability":"mutable","name":"targetToken","nameLocation":"9598:11:71","nodeType":"VariableDeclaration","scope":16398,"src":"9591:18:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":16383,"nodeType":"UserDefinedTypeName","pathNode":{"id":16382,"name":"IERC20","nameLocations":["9591:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"9591:6:71"},"referencedDeclaration":9632,"src":"9591:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"9590:20:71"},"returnParameters":{"id":16388,"nodeType":"ParameterList","parameters":[],"src":"9649:0:71"},"scope":16572,"src":"9567:168:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[891],"body":{"id":16446,"nodeType":"Block","src":"9887:500:71","statements":[{"condition":{"baseExpression":{"id":16407,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15938,"src":"9901:19:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":16409,"indexExpression":{"id":16408,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16402,"src":"9921:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9901:38:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16418,"nodeType":"IfStatement","src":"9897:133:71","trueBody":{"id":16417,"nodeType":"Block","src":"9941:89:71","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":16413,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16402,"src":"10000:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16412,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9992:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16411,"name":"address","nodeType":"ElementaryTypeName","src":"9992:7:71","typeDescriptions":{}}},"id":16414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9992:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16410,"name":"ProtocolFeeBurnerAlreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":800,"src":"9962:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":16415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9962:57:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16416,"nodeType":"RevertStatement","src":"9955:64:71"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":16421,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16402,"src":"10167:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10159:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16419,"name":"address","nodeType":"ElementaryTypeName","src":"10159:7:71","typeDescriptions":{}}},"id":16422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10159:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":16425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16423,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:71","typeDescriptions":{}}},"id":16426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10159:40:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16432,"nodeType":"IfStatement","src":"10155:104:71","trueBody":{"id":16431,"nodeType":"Block","src":"10201:58:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16428,"name":"InvalidProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":790,"src":"10222:24:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10222:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16430,"nodeType":"RevertStatement","src":"10215:33:71"}]}},{"expression":{"id":16437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16433,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15938,"src":"10269:19:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":16435,"indexExpression":{"id":16434,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16402,"src":"10289:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10269:38:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":16436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10310:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"10269:45:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16438,"nodeType":"ExpressionStatement","src":"10269:45:71"},{"eventCall":{"arguments":[{"arguments":[{"id":16442,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16402,"src":"10361:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10353:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16440,"name":"address","nodeType":"ElementaryTypeName","src":"10353:7:71","typeDescriptions":{}}},"id":16443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16439,"name":"ProtocolFeeBurnerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":776,"src":"10330:22:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":16444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10330:50:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16445,"nodeType":"EmitStatement","src":"10325:55:71"}]},"documentation":{"id":16399,"nodeType":"StructuredDocumentation","src":"9741:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e20c482f","id":16447,"implemented":true,"kind":"function","modifiers":[{"id":16405,"kind":"modifierInvocation","modifierName":{"id":16404,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9858:28:71"],"nodeType":"IdentifierPath","referencedDeclaration":15951,"src":"9858:28:71"},"nodeType":"ModifierInvocation","src":"9858:28:71"}],"name":"addProtocolFeeBurner","nameLocation":"9790:20:71","nodeType":"FunctionDefinition","parameters":{"id":16403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16402,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"9830:17:71","nodeType":"VariableDeclaration","scope":16447,"src":"9811:36:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":16401,"nodeType":"UserDefinedTypeName","pathNode":{"id":16400,"name":"IProtocolFeeBurner","nameLocations":["9811:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"9811:18:71"},"referencedDeclaration":718,"src":"9811:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"9810:38:71"},"returnParameters":{"id":16406,"nodeType":"ParameterList","parameters":[],"src":"9887:0:71"},"scope":16572,"src":"9781:606:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[898],"body":{"id":16483,"nodeType":"Block","src":"10542:279:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16456,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15938,"src":"10556:19:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":16458,"indexExpression":{"id":16457,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16451,"src":"10576:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10556:38:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":16459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10598:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10556:47:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16469,"nodeType":"IfStatement","src":"10552:138:71","trueBody":{"id":16468,"nodeType":"Block","src":"10605:85:71","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":16464,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16451,"src":"10660:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10652:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16462,"name":"address","nodeType":"ElementaryTypeName","src":"10652:7:71","typeDescriptions":{}}},"id":16465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10652:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16461,"name":"ProtocolFeeBurnerNotAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"10626:25:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":16466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10626:53:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16467,"nodeType":"RevertStatement","src":"10619:60:71"}]}},{"expression":{"id":16474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16470,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15938,"src":"10700:19:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$718_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":16472,"indexExpression":{"id":16471,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16451,"src":"10720:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10700:38:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":16473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10741:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10700:46:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16475,"nodeType":"ExpressionStatement","src":"10700:46:71"},{"eventCall":{"arguments":[{"arguments":[{"id":16479,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16451,"src":"10795:17:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}],"id":16478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10787:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16477,"name":"address","nodeType":"ElementaryTypeName","src":"10787:7:71","typeDescriptions":{}}},"id":16480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10787:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16476,"name":"ProtocolFeeBurnerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":781,"src":"10762:24:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":16481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10762:52:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16482,"nodeType":"EmitStatement","src":"10757:57:71"}]},"documentation":{"id":16448,"nodeType":"StructuredDocumentation","src":"10393:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b11f061e","id":16484,"implemented":true,"kind":"function","modifiers":[{"id":16454,"kind":"modifierInvocation","modifierName":{"id":16453,"name":"onlyFeeRecipientOrGovernance","nameLocations":["10513:28:71"],"nodeType":"IdentifierPath","referencedDeclaration":15951,"src":"10513:28:71"},"nodeType":"ModifierInvocation","src":"10513:28:71"}],"name":"removeProtocolFeeBurner","nameLocation":"10442:23:71","nodeType":"FunctionDefinition","parameters":{"id":16452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16451,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"10485:17:71","nodeType":"VariableDeclaration","scope":16484,"src":"10466:36:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":16450,"nodeType":"UserDefinedTypeName","pathNode":{"id":16449,"name":"IProtocolFeeBurner","nameLocations":["10466:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"10466:18:71"},"referencedDeclaration":718,"src":"10466:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$718","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"10465:38:71"},"returnParameters":{"id":16455,"nodeType":"ParameterList","parameters":[],"src":"10542:0:71"},"scope":16572,"src":"10433:388:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[906],"body":{"id":16546,"nodeType":"Block","src":"10945:397:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16494,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10959:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10963:6:71","memberName":"sender","nodeType":"MemberAccess","src":"10959:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16496,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15933,"src":"10973:13:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10959:27:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16502,"nodeType":"IfStatement","src":"10955:83:71","trueBody":{"id":16501,"nodeType":"Block","src":"10988:50:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16498,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"11009:16:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16500,"nodeType":"RevertStatement","src":"11002:25:71"}]}},{"body":{"id":16544,"nodeType":"Block","src":"11095:241:71","statements":[{"assignments":[16516],"declarations":[{"constant":false,"id":16516,"mutability":"mutable","name":"feeToken","nameLocation":"11116:8:71","nodeType":"VariableDeclaration","scope":16544,"src":"11109:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":16515,"nodeType":"UserDefinedTypeName","pathNode":{"id":16514,"name":"IERC20","nameLocations":["11109:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"11109:6:71"},"referencedDeclaration":9632,"src":"11109:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"id":16520,"initialValue":{"baseExpression":{"id":16517,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16489,"src":"11127:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16519,"indexExpression":{"id":16518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16504,"src":"11137:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11127:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11109:30:71"},{"assignments":[16522],"declarations":[{"constant":false,"id":16522,"mutability":"mutable","name":"tokenBalance","nameLocation":"11161:12:71","nodeType":"VariableDeclaration","scope":16544,"src":"11153:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16521,"name":"uint256","nodeType":"ElementaryTypeName","src":"11153:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16530,"initialValue":{"arguments":[{"arguments":[{"id":16527,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11203:4:71","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$16572","typeString":"contract ProtocolFeeSweeper"}],"id":16526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11195:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16525,"name":"address","nodeType":"ElementaryTypeName","src":"11195:7:71","typeDescriptions":{}}},"id":16528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11195:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16523,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16516,"src":"11176:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11185:9:71","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"11176:18:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11176:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11153:56:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16531,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16522,"src":"11228:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11243:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11228:16:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16543,"nodeType":"IfStatement","src":"11224:102:71","trueBody":{"id":16542,"nodeType":"Block","src":"11246:80:71","statements":[{"expression":{"arguments":[{"expression":{"id":16537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11286:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11290:6:71","memberName":"sender","nodeType":"MemberAccess","src":"11286:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16539,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16522,"src":"11298:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16534,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16516,"src":"11264:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11273:12:71","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"11264:21:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":16540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11264:47:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16541,"nodeType":"ExpressionStatement","src":"11264:47:71"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16507,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16504,"src":"11068:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":16508,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16489,"src":"11072:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11082:6:71","memberName":"length","nodeType":"MemberAccess","src":"11072:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11068:20:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16545,"initializationExpression":{"assignments":[16504],"declarations":[{"constant":false,"id":16504,"mutability":"mutable","name":"i","nameLocation":"11061:1:71","nodeType":"VariableDeclaration","scope":16545,"src":"11053:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16503,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16506,"initialValue":{"hexValue":"30","id":16505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11065:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11053:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11090:3:71","subExpression":{"id":16511,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16504,"src":"11092:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16513,"nodeType":"ExpressionStatement","src":"11090:3:71"},"nodeType":"ForStatement","src":"11048:288:71"}]},"documentation":{"id":16485,"nodeType":"StructuredDocumentation","src":"10827:35:71","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b0edcc53","id":16547,"implemented":true,"kind":"function","modifiers":[{"id":16492,"kind":"modifierInvocation","modifierName":{"id":16491,"name":"nonReentrant","nameLocations":["10932:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":6301,"src":"10932:12:71"},"nodeType":"ModifierInvocation","src":"10932:12:71"}],"name":"recoverProtocolFees","nameLocation":"10876:19:71","nodeType":"FunctionDefinition","parameters":{"id":16490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16489,"mutability":"mutable","name":"feeTokens","nameLocation":"10912:9:71","nodeType":"VariableDeclaration","scope":16547,"src":"10896:25:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16487,"nodeType":"UserDefinedTypeName","pathNode":{"id":16486,"name":"IERC20","nameLocations":["10896:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"10896:6:71"},"referencedDeclaration":9632,"src":"10896:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16488,"nodeType":"ArrayTypeName","src":"10896:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"10895:27:71"},"returnParameters":{"id":16493,"nodeType":"ParameterList","parameters":[],"src":"10945:0:71"},"scope":16572,"src":"10867:475:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16553,"nodeType":"Block","src":"11824:42:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16550,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15928,"src":"11841:16:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11841:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16552,"nodeType":"RevertStatement","src":"11834:25:71"}]},"id":16554,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16548,"nodeType":"ParameterList","parameters":[],"src":"11804:2:71"},"returnParameters":{"id":16549,"nodeType":"ParameterList","parameters":[],"src":"11824:0:71"},"scope":16572,"src":"11797:69:71","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":16570,"nodeType":"Block","src":"11944:121:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16557,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11958:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11962:5:71","memberName":"value","nodeType":"MemberAccess","src":"11958:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11970:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11958:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16565,"nodeType":"IfStatement","src":"11954:69:71","trueBody":{"id":16564,"nodeType":"Block","src":"11973:50:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16561,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15928,"src":"11994:16:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11994:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16563,"nodeType":"RevertStatement","src":"11987:25:71"}]}},{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":16567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12040:17:71","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":16566,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12033:6:71","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":16568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12033:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16569,"nodeType":"ExpressionStatement","src":"12033:25:71"}]},"id":16571,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16555,"nodeType":"ParameterList","parameters":[],"src":"11924:2:71"},"returnParameters":{"id":16556,"nodeType":"ParameterList","parameters":[],"src":"11944:0:71"},"scope":16572,"src":"11916:149:71","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":16573,"src":"1713:10354:71","usedErrors":[72,784,787,790,795,800,805,808,811,6290,6689,9711,9992,9997,10000,15928],"usedEvents":[754,759,771,776,781]}],"src":"46:12022:71"},"id":71},"contracts/WeightedLPOracle.sol":{"ast":{"absolutePath":"contracts/WeightedLPOracle.sol","exportedSymbols":{"AggregatorV3Interface":[8718],"FixedPoint":[4921],"IERC20":[9632],"IERC20Metadata":[9658],"IVault":[2319],"IWeightedLPOracle":[952],"IWeightedPool":[66],"InputHelpers":[4492],"Rounding":[3940],"SafeCast":[12026],"WeightedLPOracle":[17660]},"id":17661,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16574,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:72"},{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","file":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","id":16576,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":8719,"src":"72:114:72","symbolAliases":[{"foreign":{"id":16575,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"81:21:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":16578,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":9659,"src":"187:99:72","symbolAliases":[{"foreign":{"id":16577,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9658,"src":"196:14:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":16580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":12027,"src":"287:75:72","symbolAliases":[{"foreign":{"id":16579,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"296:8:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":16582,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":9633,"src":"363:72:72","symbolAliases":[{"foreign":{"id":16581,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"372:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol","id":16584,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":953,"src":"437:114:72","symbolAliases":[{"foreign":{"id":16583,"name":"IWeightedLPOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"446:17:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","id":16586,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":67,"src":"552:103:72","symbolAliases":[{"foreign":{"id":16585,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"561:13:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":16588,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":4080,"src":"656:87:72","symbolAliases":[{"foreign":{"id":16587,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"665:8:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":16590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":2320,"src":"744:81:72","symbolAliases":[{"foreign":{"id":16589,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"753:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":16592,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":4493,"src":"827:99:72","symbolAliases":[{"foreign":{"id":16591,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"836:12:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":16594,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17661,"sourceUnit":4922,"src":"927:92:72","symbolAliases":[{"foreign":{"id":16593,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"936:10:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16595,"name":"IWeightedLPOracle","nameLocations":["1050:17:72"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"1050:17:72"},"id":16596,"nodeType":"InheritanceSpecifier","src":"1050:17:72"},{"baseName":{"id":16597,"name":"AggregatorV3Interface","nameLocations":["1069:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1069:21:72"},"id":16598,"nodeType":"InheritanceSpecifier","src":"1069:21:72"}],"canonicalName":"WeightedLPOracle","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":17660,"linearizedBaseContracts":[17660,8718,952],"name":"WeightedLPOracle","nameLocation":"1030:16:72","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16601,"libraryName":{"id":16599,"name":"FixedPoint","nameLocations":["1103:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":4921,"src":"1103:10:72"},"nodeType":"UsingForDirective","src":"1097:29:72","typeName":{"id":16600,"name":"uint256","nodeType":"ElementaryTypeName","src":"1118:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":16603,"libraryName":{"id":16602,"name":"SafeCast","nameLocations":["1137:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":12026,"src":"1137:8:72"},"nodeType":"UsingForDirective","src":"1131:21:72"},{"errorSelector":"d4f1d302","id":16605,"name":"UnsupportedDecimals","nameLocation":"1164:19:72","nodeType":"ErrorDefinition","parameters":{"id":16604,"nodeType":"ParameterList","parameters":[],"src":"1183:2:72"},"src":"1158:28:72"},{"constant":true,"id":16608,"mutability":"constant","name":"_WAD_DECIMALS","nameLocation":"1218:13:72","nodeType":"VariableDeclaration","scope":17660,"src":"1192:44:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16606,"name":"uint256","nodeType":"ElementaryTypeName","src":"1192:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3138","id":16607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1234:2:72","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"internal"},{"constant":false,"id":16611,"mutability":"immutable","name":"_vault","nameLocation":"1269:6:72","nodeType":"VariableDeclaration","scope":17660,"src":"1243:32:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":16610,"nodeType":"UserDefinedTypeName","pathNode":{"id":16609,"name":"IVault","nameLocations":["1243:6:72"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1243:6:72"},"referencedDeclaration":2319,"src":"1243:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"functionSelector":"16f0115b","id":16614,"mutability":"immutable","name":"pool","nameLocation":"1312:4:72","nodeType":"VariableDeclaration","scope":17660,"src":"1281:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":16613,"nodeType":"UserDefinedTypeName","pathNode":{"id":16612,"name":"IWeightedPool","nameLocations":["1281:13:72"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"1281:13:72"},"referencedDeclaration":66,"src":"1281:13:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"public"},{"constant":false,"id":16616,"mutability":"immutable","name":"_version","nameLocation":"1349:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1322:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16615,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16618,"mutability":"immutable","name":"_totalTokens","nameLocation":"1390:12:72","nodeType":"VariableDeclaration","scope":17660,"src":"1363:39:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16617,"name":"uint256","nodeType":"ElementaryTypeName","src":"1363:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16620,"mutability":"mutable","name":"_description","nameLocation":"1424:12:72","nodeType":"VariableDeclaration","scope":17660,"src":"1408:28:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":16619,"name":"string","nodeType":"ElementaryTypeName","src":"1408:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16622,"mutability":"immutable","name":"_weight0","nameLocation":"1470:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1443:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16621,"name":"uint256","nodeType":"ElementaryTypeName","src":"1443:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16624,"mutability":"immutable","name":"_weight1","nameLocation":"1511:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1484:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16623,"name":"uint256","nodeType":"ElementaryTypeName","src":"1484:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16626,"mutability":"immutable","name":"_weight2","nameLocation":"1552:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1525:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16625,"name":"uint256","nodeType":"ElementaryTypeName","src":"1525:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16628,"mutability":"immutable","name":"_weight3","nameLocation":"1593:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1566:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16627,"name":"uint256","nodeType":"ElementaryTypeName","src":"1566:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16630,"mutability":"immutable","name":"_weight4","nameLocation":"1634:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1607:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16629,"name":"uint256","nodeType":"ElementaryTypeName","src":"1607:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16632,"mutability":"immutable","name":"_weight5","nameLocation":"1675:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1648:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16631,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16634,"mutability":"immutable","name":"_weight6","nameLocation":"1716:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1689:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16633,"name":"uint256","nodeType":"ElementaryTypeName","src":"1689:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16636,"mutability":"immutable","name":"_weight7","nameLocation":"1757:8:72","nodeType":"VariableDeclaration","scope":17660,"src":"1730:35:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16635,"name":"uint256","nodeType":"ElementaryTypeName","src":"1730:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16639,"mutability":"immutable","name":"_feedToken0","nameLocation":"1813:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"1772:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16638,"nodeType":"UserDefinedTypeName","pathNode":{"id":16637,"name":"AggregatorV3Interface","nameLocations":["1772:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1772:21:72"},"referencedDeclaration":8718,"src":"1772:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16642,"mutability":"immutable","name":"_feedToken1","nameLocation":"1871:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"1830:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16641,"nodeType":"UserDefinedTypeName","pathNode":{"id":16640,"name":"AggregatorV3Interface","nameLocations":["1830:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1830:21:72"},"referencedDeclaration":8718,"src":"1830:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16645,"mutability":"immutable","name":"_feedToken2","nameLocation":"1929:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"1888:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16644,"nodeType":"UserDefinedTypeName","pathNode":{"id":16643,"name":"AggregatorV3Interface","nameLocations":["1888:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1888:21:72"},"referencedDeclaration":8718,"src":"1888:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16648,"mutability":"immutable","name":"_feedToken3","nameLocation":"1987:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"1946:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16647,"nodeType":"UserDefinedTypeName","pathNode":{"id":16646,"name":"AggregatorV3Interface","nameLocations":["1946:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1946:21:72"},"referencedDeclaration":8718,"src":"1946:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16651,"mutability":"immutable","name":"_feedToken4","nameLocation":"2045:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"2004:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16650,"nodeType":"UserDefinedTypeName","pathNode":{"id":16649,"name":"AggregatorV3Interface","nameLocations":["2004:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"2004:21:72"},"referencedDeclaration":8718,"src":"2004:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16654,"mutability":"immutable","name":"_feedToken5","nameLocation":"2103:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"2062:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16653,"nodeType":"UserDefinedTypeName","pathNode":{"id":16652,"name":"AggregatorV3Interface","nameLocations":["2062:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"2062:21:72"},"referencedDeclaration":8718,"src":"2062:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16657,"mutability":"immutable","name":"_feedToken6","nameLocation":"2161:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"2120:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16656,"nodeType":"UserDefinedTypeName","pathNode":{"id":16655,"name":"AggregatorV3Interface","nameLocations":["2120:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"2120:21:72"},"referencedDeclaration":8718,"src":"2120:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16660,"mutability":"immutable","name":"_feedToken7","nameLocation":"2219:11:72","nodeType":"VariableDeclaration","scope":17660,"src":"2178:52:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":16659,"nodeType":"UserDefinedTypeName","pathNode":{"id":16658,"name":"AggregatorV3Interface","nameLocations":["2178:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"2178:21:72"},"referencedDeclaration":8718,"src":"2178:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"},{"constant":false,"id":16662,"mutability":"immutable","name":"_feedToken0DecimalScalingFactor","nameLocation":"2264:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2237:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16661,"name":"uint256","nodeType":"ElementaryTypeName","src":"2237:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16664,"mutability":"immutable","name":"_feedToken1DecimalScalingFactor","nameLocation":"2328:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2301:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16663,"name":"uint256","nodeType":"ElementaryTypeName","src":"2301:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16666,"mutability":"immutable","name":"_feedToken2DecimalScalingFactor","nameLocation":"2392:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2365:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16665,"name":"uint256","nodeType":"ElementaryTypeName","src":"2365:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16668,"mutability":"immutable","name":"_feedToken3DecimalScalingFactor","nameLocation":"2456:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2429:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2429:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16670,"mutability":"immutable","name":"_feedToken4DecimalScalingFactor","nameLocation":"2520:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2493:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16669,"name":"uint256","nodeType":"ElementaryTypeName","src":"2493:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16672,"mutability":"immutable","name":"_feedToken5DecimalScalingFactor","nameLocation":"2584:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2557:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16671,"name":"uint256","nodeType":"ElementaryTypeName","src":"2557:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16674,"mutability":"immutable","name":"_feedToken6DecimalScalingFactor","nameLocation":"2648:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2621:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16673,"name":"uint256","nodeType":"ElementaryTypeName","src":"2621:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16676,"mutability":"immutable","name":"_feedToken7DecimalScalingFactor","nameLocation":"2712:31:72","nodeType":"VariableDeclaration","scope":17660,"src":"2685:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16675,"name":"uint256","nodeType":"ElementaryTypeName","src":"2685:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":16949,"nodeType":"Block","src":"2854:2212:72","statements":[{"expression":{"id":16693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16691,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16616,"src":"2864:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16692,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16688,"src":"2875:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2864:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16694,"nodeType":"ExpressionStatement","src":"2864:19:72"},{"expression":{"id":16697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16695,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16611,"src":"2893:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16696,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16679,"src":"2902:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"src":"2893:15:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":16698,"nodeType":"ExpressionStatement","src":"2893:15:72"},{"expression":{"id":16701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16699,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16614,"src":"2918:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16700,"name":"pool_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16682,"src":"2925:5:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"src":"2918:12:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"id":16702,"nodeType":"ExpressionStatement","src":"2918:12:72"},{"assignments":[16707],"declarations":[{"constant":false,"id":16707,"mutability":"mutable","name":"tokens","nameLocation":"2957:6:72","nodeType":"VariableDeclaration","scope":16949,"src":"2941:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16705,"nodeType":"UserDefinedTypeName","pathNode":{"id":16704,"name":"IERC20","nameLocations":["2941:6:72"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"2941:6:72"},"referencedDeclaration":9632,"src":"2941:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":16706,"nodeType":"ArrayTypeName","src":"2941:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":16715,"initialValue":{"arguments":[{"arguments":[{"id":16712,"name":"pool_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16682,"src":"2995:5:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}],"id":16711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2987:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16710,"name":"address","nodeType":"ElementaryTypeName","src":"2987:7:72","typeDescriptions":{}}},"id":16713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2987:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16708,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16679,"src":"2966:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":16709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2973:13:72","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3353,"src":"2966:20:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":16714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2966:36:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2941:61:72"},{"assignments":[16720],"declarations":[{"constant":false,"id":16720,"mutability":"mutable","name":"weights","nameLocation":"3029:7:72","nodeType":"VariableDeclaration","scope":16949,"src":"3012:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16718,"name":"uint256","nodeType":"ElementaryTypeName","src":"3012:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16719,"nodeType":"ArrayTypeName","src":"3012:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16724,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16721,"name":"pool_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16682,"src":"3039:5:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"id":16722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3045:20:72","memberName":"getNormalizedWeights","nodeType":"MemberAccess","referencedDeclaration":51,"src":"3039:26:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view external returns (uint256[] memory)"}},"id":16723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:28:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3012:55:72"},{"assignments":[16726],"declarations":[{"constant":false,"id":16726,"mutability":"mutable","name":"totalTokens","nameLocation":"3082:11:72","nodeType":"VariableDeclaration","scope":16949,"src":"3077:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16725,"name":"uint","nodeType":"ElementaryTypeName","src":"3077:4:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16729,"initialValue":{"expression":{"id":16727,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16707,"src":"3096:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$9632_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3103:6:72","memberName":"length","nodeType":"MemberAccess","src":"3096:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3077:32:72"},{"expression":{"id":16732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16730,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"3120:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16731,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"3135:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3120:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16733,"nodeType":"ExpressionStatement","src":"3120:26:72"},{"expression":{"id":16748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16734,"name":"_description","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16620,"src":"3156:12:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":16741,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16614,"src":"3208:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}],"id":16740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3200:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16739,"name":"address","nodeType":"ElementaryTypeName","src":"3200:7:72","typeDescriptions":{}}},"id":16742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3200:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16738,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9658,"src":"3185:14:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$9658_$","typeString":"type(contract IERC20Metadata)"}},"id":16743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3185:29:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$9658","typeString":"contract IERC20Metadata"}},"id":16744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3215:6:72","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":9651,"src":"3185:36:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":16745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3185:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"2f555344","id":16746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3225:6:72","typeDescriptions":{"typeIdentifier":"t_stringliteral_4d116fee1437dfd941cc0f423577a5c2aba8a51884bb6e730d98ca0ff0199de6","typeString":"literal_string \"/USD\""},"value":"/USD"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_4d116fee1437dfd941cc0f423577a5c2aba8a51884bb6e730d98ca0ff0199de6","typeString":"literal_string \"/USD\""}],"expression":{"id":16736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3171:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":16735,"name":"string","nodeType":"ElementaryTypeName","src":"3171:6:72","typeDescriptions":{}}},"id":16737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3178:6:72","memberName":"concat","nodeType":"MemberAccess","src":"3171:13:72","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":16747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3171:61:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3156:76:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":16749,"nodeType":"ExpressionStatement","src":"3156:76:72"},{"expression":{"arguments":[{"id":16753,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"3279:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16754,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3292:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3298:6:72","memberName":"length","nodeType":"MemberAccess","src":"3292:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16750,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"3243:12:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$4492_$","typeString":"type(library InputHelpers)"}},"id":16752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3256:22:72","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":4225,"src":"3243:35:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":16756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3243:62:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16757,"nodeType":"ExpressionStatement","src":"3243:62:72"},{"id":16948,"nodeType":"Block","src":"3343:1717:72","statements":[{"expression":{"id":16762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16758,"name":"_feedToken0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16639,"src":"3357:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16759,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3371:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16761,"indexExpression":{"hexValue":"30","id":16760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3377:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3371:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"3357:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16763,"nodeType":"ExpressionStatement","src":"3357:22:72"},{"expression":{"id":16768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16764,"name":"_weight0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16622,"src":"3393:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16765,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"3404:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16767,"indexExpression":{"hexValue":"30","id":16766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3412:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3404:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3393:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16769,"nodeType":"ExpressionStatement","src":"3393:21:72"},{"expression":{"id":16776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16770,"name":"_feedToken0DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16662,"src":"3428:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16772,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3500:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16774,"indexExpression":{"hexValue":"30","id":16773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3506:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3500:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16771,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"3462:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3428:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16777,"nodeType":"ExpressionStatement","src":"3428:81:72"},{"expression":{"id":16782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16778,"name":"_feedToken1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16642,"src":"3524:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16779,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3538:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16781,"indexExpression":{"hexValue":"31","id":16780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3544:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3538:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"3524:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16783,"nodeType":"ExpressionStatement","src":"3524:22:72"},{"expression":{"id":16788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16784,"name":"_weight1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16624,"src":"3560:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16785,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"3571:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16787,"indexExpression":{"hexValue":"31","id":16786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3579:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3571:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3560:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16789,"nodeType":"ExpressionStatement","src":"3560:21:72"},{"expression":{"id":16796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16790,"name":"_feedToken1DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16664,"src":"3595:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16792,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3667:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16794,"indexExpression":{"hexValue":"31","id":16793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3673:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3667:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16791,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"3629:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3629:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3595:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16797,"nodeType":"ExpressionStatement","src":"3595:81:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16798,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"3703:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":16799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3703:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16822,"nodeType":"IfStatement","src":"3699:215:72","trueBody":{"id":16821,"nodeType":"Block","src":"3720:194:72","statements":[{"expression":{"id":16805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16801,"name":"_feedToken2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16645,"src":"3739:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16802,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3753:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16804,"indexExpression":{"hexValue":"32","id":16803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3759:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3753:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"3739:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16806,"nodeType":"ExpressionStatement","src":"3739:22:72"},{"expression":{"id":16811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16807,"name":"_weight2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16626,"src":"3779:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16808,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"3790:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16810,"indexExpression":{"hexValue":"32","id":16809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3798:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3790:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3779:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16812,"nodeType":"ExpressionStatement","src":"3779:21:72"},{"expression":{"id":16819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16813,"name":"_feedToken2DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16666,"src":"3818:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16815,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3890:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16817,"indexExpression":{"hexValue":"32","id":16816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3896:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3890:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16814,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"3852:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3852:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16820,"nodeType":"ExpressionStatement","src":"3818:81:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16823,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"3931:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"33","id":16824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3945:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"3931:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16847,"nodeType":"IfStatement","src":"3927:215:72","trueBody":{"id":16846,"nodeType":"Block","src":"3948:194:72","statements":[{"expression":{"id":16830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16826,"name":"_feedToken3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"3967:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16827,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"3981:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16829,"indexExpression":{"hexValue":"33","id":16828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3987:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3981:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"3967:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16831,"nodeType":"ExpressionStatement","src":"3967:22:72"},{"expression":{"id":16836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16832,"name":"_weight3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16628,"src":"4007:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16833,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"4018:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16835,"indexExpression":{"hexValue":"33","id":16834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4026:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4018:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4007:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16837,"nodeType":"ExpressionStatement","src":"4007:21:72"},{"expression":{"id":16844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16838,"name":"_feedToken3DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16668,"src":"4046:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16840,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4118:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16842,"indexExpression":{"hexValue":"33","id":16841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4124:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4118:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16839,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"4080:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4080:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4046:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16845,"nodeType":"ExpressionStatement","src":"4046:81:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16848,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"4159:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"34","id":16849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4173:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"4159:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16872,"nodeType":"IfStatement","src":"4155:214:72","trueBody":{"id":16871,"nodeType":"Block","src":"4176:193:72","statements":[{"expression":{"id":16855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16851,"name":"_feedToken4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16651,"src":"4194:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16852,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4208:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16854,"indexExpression":{"hexValue":"34","id":16853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4214:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4208:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"4194:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16856,"nodeType":"ExpressionStatement","src":"4194:22:72"},{"expression":{"id":16861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16857,"name":"_weight4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16630,"src":"4234:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16858,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"4245:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16860,"indexExpression":{"hexValue":"34","id":16859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4253:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4245:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4234:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16862,"nodeType":"ExpressionStatement","src":"4234:21:72"},{"expression":{"id":16869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16863,"name":"_feedToken4DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16670,"src":"4273:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16865,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4345:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16867,"indexExpression":{"hexValue":"34","id":16866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4351:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4345:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16864,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"4307:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4307:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4273:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16870,"nodeType":"ExpressionStatement","src":"4273:81:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16873,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"4386:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"35","id":16874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4400:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"4386:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16897,"nodeType":"IfStatement","src":"4382:214:72","trueBody":{"id":16896,"nodeType":"Block","src":"4403:193:72","statements":[{"expression":{"id":16880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16876,"name":"_feedToken5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16654,"src":"4421:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16877,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4435:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16879,"indexExpression":{"hexValue":"35","id":16878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4441:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4435:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"4421:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16881,"nodeType":"ExpressionStatement","src":"4421:22:72"},{"expression":{"id":16886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16882,"name":"_weight5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16632,"src":"4461:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16883,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"4472:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16885,"indexExpression":{"hexValue":"35","id":16884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4480:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4472:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4461:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16887,"nodeType":"ExpressionStatement","src":"4461:21:72"},{"expression":{"id":16894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16888,"name":"_feedToken5DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16672,"src":"4500:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16890,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4572:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16892,"indexExpression":{"hexValue":"35","id":16891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4578:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4572:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16889,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"4534:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4534:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4500:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16895,"nodeType":"ExpressionStatement","src":"4500:81:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16898,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"4613:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"36","id":16899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4627:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"4613:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16922,"nodeType":"IfStatement","src":"4609:214:72","trueBody":{"id":16921,"nodeType":"Block","src":"4630:193:72","statements":[{"expression":{"id":16905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16901,"name":"_feedToken6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16657,"src":"4648:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16902,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4662:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16904,"indexExpression":{"hexValue":"36","id":16903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4668:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4662:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"4648:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16906,"nodeType":"ExpressionStatement","src":"4648:22:72"},{"expression":{"id":16911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16907,"name":"_weight6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16634,"src":"4688:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16908,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"4699:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16910,"indexExpression":{"hexValue":"36","id":16909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4707:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4699:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4688:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16912,"nodeType":"ExpressionStatement","src":"4688:21:72"},{"expression":{"id":16919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16913,"name":"_feedToken6DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16674,"src":"4727:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16915,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4799:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16917,"indexExpression":{"hexValue":"36","id":16916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4805:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4799:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16914,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"4761:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4761:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4727:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16920,"nodeType":"ExpressionStatement","src":"4727:81:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16923,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16726,"src":"4840:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":16924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4854:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"4840:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16947,"nodeType":"IfStatement","src":"4836:214:72","trueBody":{"id":16946,"nodeType":"Block","src":"4857:193:72","statements":[{"expression":{"id":16930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16926,"name":"_feedToken7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16660,"src":"4875:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16927,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4889:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16929,"indexExpression":{"hexValue":"37","id":16928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4895:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4889:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"4875:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16931,"nodeType":"ExpressionStatement","src":"4875:22:72"},{"expression":{"id":16936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16932,"name":"_weight7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16636,"src":"4915:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":16933,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16720,"src":"4926:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16935,"indexExpression":{"hexValue":"37","id":16934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4934:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4926:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4915:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16937,"nodeType":"ExpressionStatement","src":"4915:21:72"},{"expression":{"id":16944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16938,"name":"_feedToken7DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16676,"src":"4954:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16940,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"5026:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":16942,"indexExpression":{"hexValue":"37","id":16941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5032:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5026:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":16939,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"4988:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":16943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4988:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4954:81:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16945,"nodeType":"ExpressionStatement","src":"4954:81:72"}]}}]}]},"id":16950,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16679,"mutability":"mutable","name":"vault_","nameLocation":"2769:6:72","nodeType":"VariableDeclaration","scope":16950,"src":"2762:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":16678,"nodeType":"UserDefinedTypeName","pathNode":{"id":16677,"name":"IVault","nameLocations":["2762:6:72"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"2762:6:72"},"referencedDeclaration":2319,"src":"2762:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":16682,"mutability":"mutable","name":"pool_","nameLocation":"2791:5:72","nodeType":"VariableDeclaration","scope":16950,"src":"2777:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":16681,"nodeType":"UserDefinedTypeName","pathNode":{"id":16680,"name":"IWeightedPool","nameLocations":["2777:13:72"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"2777:13:72"},"referencedDeclaration":66,"src":"2777:13:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"},{"constant":false,"id":16686,"mutability":"mutable","name":"feeds","nameLocation":"2829:5:72","nodeType":"VariableDeclaration","scope":16950,"src":"2798:36:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":16684,"nodeType":"UserDefinedTypeName","pathNode":{"id":16683,"name":"AggregatorV3Interface","nameLocations":["2798:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"2798:21:72"},"referencedDeclaration":8718,"src":"2798:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":16685,"nodeType":"ArrayTypeName","src":"2798:23:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"},{"constant":false,"id":16688,"mutability":"mutable","name":"version_","nameLocation":"2844:8:72","nodeType":"VariableDeclaration","scope":16950,"src":"2836:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16687,"name":"uint256","nodeType":"ElementaryTypeName","src":"2836:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2761:92:72"},"returnParameters":{"id":16690,"nodeType":"ParameterList","parameters":[],"src":"2854:0:72"},"scope":17660,"src":"2750:2316:72","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[8689],"body":{"id":16958,"nodeType":"Block","src":"5284:32:72","statements":[{"expression":{"id":16956,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16616,"src":"5301:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16955,"id":16957,"nodeType":"Return","src":"5294:15:72"}]},"documentation":{"id":16951,"nodeType":"StructuredDocumentation","src":"5072:156:72","text":" @notice Get the version of the oracle.\n @dev Declared in AggregatorV3Interface.\n @return version The numerical version number"},"functionSelector":"54fd4d50","id":16959,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"5242:7:72","nodeType":"FunctionDefinition","parameters":{"id":16952,"nodeType":"ParameterList","parameters":[],"src":"5249:2:72"},"returnParameters":{"id":16955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16954,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16959,"src":"5275:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16953,"name":"uint256","nodeType":"ElementaryTypeName","src":"5275:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5274:9:72"},"scope":17660,"src":"5233:83:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[8679],"body":{"id":16970,"nodeType":"Block","src":"5602:44:72","statements":[{"expression":{"arguments":[{"id":16967,"name":"_WAD_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16608,"src":"5625:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5619:5:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":16965,"name":"uint8","nodeType":"ElementaryTypeName","src":"5619:5:72","typeDescriptions":{}}},"id":16968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5619:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":16964,"id":16969,"nodeType":"Return","src":"5612:27:72"}]},"documentation":{"id":16960,"nodeType":"StructuredDocumentation","src":"5322:225:72","text":" @notice Get the number of decimals present in the response value.\n @dev Declared in AggregatorV3Interface.\n @dev This is hard-coded to 18 decimals.\n @return decimals The number of decimals"},"functionSelector":"313ce567","id":16971,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"5561:8:72","nodeType":"FunctionDefinition","parameters":{"id":16961,"nodeType":"ParameterList","parameters":[],"src":"5569:2:72"},"returnParameters":{"id":16964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16971,"src":"5595:5:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":16962,"name":"uint8","nodeType":"ElementaryTypeName","src":"5595:5:72","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5594:7:72"},"scope":17660,"src":"5552:94:72","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[8684],"body":{"id":16979,"nodeType":"Block","src":"5921:36:72","statements":[{"expression":{"id":16977,"name":"_description","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16620,"src":"5938:12:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":16976,"id":16978,"nodeType":"Return","src":"5931:19:72"}]},"documentation":{"id":16972,"nodeType":"StructuredDocumentation","src":"5652:203:72","text":" @notice Get the description of the underlying aggregator that the proxy points to.\n @dev Declared in AggregatorV3Interface.\n @return description The description as a string"},"functionSelector":"7284e416","id":16980,"implemented":true,"kind":"function","modifiers":[],"name":"description","nameLocation":"5869:11:72","nodeType":"FunctionDefinition","parameters":{"id":16973,"nodeType":"ParameterList","parameters":[],"src":"5880:2:72"},"returnParameters":{"id":16976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16975,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16980,"src":"5906:13:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16974,"name":"string","nodeType":"ElementaryTypeName","src":"5906:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5905:15:72"},"scope":17660,"src":"5860:97:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[8704],"body":{"id":17003,"nodeType":"Block","src":"6663:39:72","statements":[{"expression":{"components":[{"hexValue":"30","id":16996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6681:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":16997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6684:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":16998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6687:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":16999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6690:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6693:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":17001,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6680:15:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":16995,"id":17002,"nodeType":"Return","src":"6673:22:72"}]},"documentation":{"id":16981,"nodeType":"StructuredDocumentation","src":"5963:492:72","text":" @notice Get data about a specific round, using the roundId.\n @dev Declared in AggregatorV3Interface. This is unused, and always returns all zeros.\n @return roundId The round ID\n @return answer The answer for this round\n @return startedAt Timestamp when the round started\n @return updatedAt Timestamp when the round was updated\n @return answeredInRound [Deprecated] - Previously used when answers could take multiple rounds to be computed"},"functionSelector":"9a6fc8f5","id":17004,"implemented":true,"kind":"function","modifiers":[],"name":"getRoundData","nameLocation":"6469:12:72","nodeType":"FunctionDefinition","parameters":{"id":16984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16983,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17004,"src":"6491:6:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":16982,"name":"uint80","nodeType":"ElementaryTypeName","src":"6491:6:72","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"6481:37:72"},"returnParameters":{"id":16995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16986,"mutability":"mutable","name":"roundId","nameLocation":"6573:7:72","nodeType":"VariableDeclaration","scope":17004,"src":"6566:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":16985,"name":"uint80","nodeType":"ElementaryTypeName","src":"6566:6:72","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":16988,"mutability":"mutable","name":"answer","nameLocation":"6589:6:72","nodeType":"VariableDeclaration","scope":17004,"src":"6582:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16987,"name":"int256","nodeType":"ElementaryTypeName","src":"6582:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":16990,"mutability":"mutable","name":"startedAt","nameLocation":"6605:9:72","nodeType":"VariableDeclaration","scope":17004,"src":"6597:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16989,"name":"uint256","nodeType":"ElementaryTypeName","src":"6597:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16992,"mutability":"mutable","name":"updatedAt","nameLocation":"6624:9:72","nodeType":"VariableDeclaration","scope":17004,"src":"6616:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16991,"name":"uint256","nodeType":"ElementaryTypeName","src":"6616:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16994,"mutability":"mutable","name":"answeredInRound","nameLocation":"6642:15:72","nodeType":"VariableDeclaration","scope":17004,"src":"6635:22:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":16993,"name":"uint80","nodeType":"ElementaryTypeName","src":"6635:6:72","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"6565:93:72"},"scope":17660,"src":"6460:242:72","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[8717],"body":{"id":17060,"nodeType":"Block","src":"7314:297:72","statements":[{"assignments":[17022,17024],"declarations":[{"constant":false,"id":17022,"mutability":"mutable","name":"prices","nameLocation":"7341:6:72","nodeType":"VariableDeclaration","scope":17060,"src":"7325:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17020,"name":"int256","nodeType":"ElementaryTypeName","src":"7325:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17021,"nodeType":"ArrayTypeName","src":"7325:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":17024,"mutability":"mutable","name":"_updatedAt","nameLocation":"7357:10:72","nodeType":"VariableDeclaration","scope":17060,"src":"7349:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17023,"name":"uint256","nodeType":"ElementaryTypeName","src":"7349:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17027,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":17025,"name":"getFeedData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17242,"src":"7371:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_int256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function () view returns (int256[] memory,uint256)"}},"id":17026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7371:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_int256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(int256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7324:60:72"},{"assignments":[17029],"declarations":[{"constant":false,"id":17029,"mutability":"mutable","name":"tvl","nameLocation":"7403:3:72","nodeType":"VariableDeclaration","scope":17060,"src":"7395:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17028,"name":"uint256","nodeType":"ElementaryTypeName","src":"7395:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17033,"initialValue":{"arguments":[{"id":17031,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17022,"src":"7422:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":17030,"name":"calculateTVL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17151,"src":"7409:12:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) view returns (uint256)"}},"id":17032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7409:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7395:34:72"},{"assignments":[17035],"declarations":[{"constant":false,"id":17035,"mutability":"mutable","name":"totalSupply","nameLocation":"7447:11:72","nodeType":"VariableDeclaration","scope":17060,"src":"7439:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17034,"name":"uint256","nodeType":"ElementaryTypeName","src":"7439:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17043,"initialValue":{"arguments":[{"arguments":[{"id":17040,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16614,"src":"7488:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}],"id":17039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7480:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17038,"name":"address","nodeType":"ElementaryTypeName","src":"7480:7:72","typeDescriptions":{}}},"id":17041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7480:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17036,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16611,"src":"7461:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":17037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7468:11:72","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":3437,"src":"7461:18:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":17042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7461:33:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7439:55:72"},{"assignments":[17045],"declarations":[{"constant":false,"id":17045,"mutability":"mutable","name":"lpPrice","nameLocation":"7513:7:72","nodeType":"VariableDeclaration","scope":17060,"src":"7505:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17044,"name":"uint256","nodeType":"ElementaryTypeName","src":"7505:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17050,"initialValue":{"arguments":[{"id":17048,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17035,"src":"7533:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17046,"name":"tvl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17029,"src":"7523:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7527:5:72","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"7523:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7523:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7505:40:72"},{"expression":{"components":[{"hexValue":"30","id":17051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7564:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17052,"name":"lpPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17045,"src":"7567:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7575:8:72","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":12025,"src":"7567:16:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":17054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7567:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":17055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7587:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":17056,"name":"_updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17024,"src":"7590:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":17057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7602:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":17058,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7563:41:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_int256_$_t_rational_0_by_1_$_t_uint256_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int256,int_const 0,uint256,int_const 0)"}},"functionReturnParameters":17017,"id":17059,"nodeType":"Return","src":"7556:48:72"}]},"documentation":{"id":17005,"nodeType":"StructuredDocumentation","src":"6708:430:72","text":" @notice Get the data from the latest round.\n @dev Declared in AggregatorV3Interface.\n @return roundId The round ID\n @return answer The answer for this round\n @return startedAt Timestamp when the round started\n @return updatedAt Timestamp when the round was updated\n @return answeredInRound [Deprecated] - Previously used when answers could take multiple rounds to be computed"},"functionSelector":"feaf968c","id":17061,"implemented":true,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"7152:15:72","nodeType":"FunctionDefinition","parameters":{"id":17006,"nodeType":"ParameterList","parameters":[],"src":"7167:2:72"},"returnParameters":{"id":17017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17008,"mutability":"mutable","name":"roundId","nameLocation":"7224:7:72","nodeType":"VariableDeclaration","scope":17061,"src":"7217:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17007,"name":"uint80","nodeType":"ElementaryTypeName","src":"7217:6:72","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":17010,"mutability":"mutable","name":"answer","nameLocation":"7240:6:72","nodeType":"VariableDeclaration","scope":17061,"src":"7233:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":17009,"name":"int256","nodeType":"ElementaryTypeName","src":"7233:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":17012,"mutability":"mutable","name":"startedAt","nameLocation":"7256:9:72","nodeType":"VariableDeclaration","scope":17061,"src":"7248:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17011,"name":"uint256","nodeType":"ElementaryTypeName","src":"7248:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17014,"mutability":"mutable","name":"updatedAt","nameLocation":"7275:9:72","nodeType":"VariableDeclaration","scope":17061,"src":"7267:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17013,"name":"uint256","nodeType":"ElementaryTypeName","src":"7267:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17016,"mutability":"mutable","name":"answeredInRound","nameLocation":"7293:15:72","nodeType":"VariableDeclaration","scope":17061,"src":"7286:22:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17015,"name":"uint80","nodeType":"ElementaryTypeName","src":"7286:6:72","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"7216:93:72"},"scope":17660,"src":"7143:468:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[920],"body":{"id":17150,"nodeType":"Block","src":"7735:2513:72","statements":[{"assignments":[17071],"declarations":[{"constant":false,"id":17071,"mutability":"mutable","name":"totalTokens","nameLocation":"7753:11:72","nodeType":"VariableDeclaration","scope":17150,"src":"7745:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17070,"name":"uint256","nodeType":"ElementaryTypeName","src":"7745:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17073,"initialValue":{"id":17072,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"7767:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7745:34:72"},{"assignments":[17078],"declarations":[{"constant":false,"id":17078,"mutability":"mutable","name":"weights","nameLocation":"7807:7:72","nodeType":"VariableDeclaration","scope":17150,"src":"7790:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17076,"name":"uint256","nodeType":"ElementaryTypeName","src":"7790:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17077,"nodeType":"ArrayTypeName","src":"7790:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":17082,"initialValue":{"arguments":[{"id":17080,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17071,"src":"7829:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17079,"name":"_getWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17659,"src":"7817:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (uint256[] memory)"}},"id":17081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7817:24:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7790:51:72"},{"assignments":[17087],"declarations":[{"constant":false,"id":17087,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"7868:24:72","nodeType":"VariableDeclaration","scope":17150,"src":"7851:41:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17085,"name":"uint256","nodeType":"ElementaryTypeName","src":"7851:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17086,"nodeType":"ArrayTypeName","src":"7851:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":17095,"initialValue":{"arguments":[{"arguments":[{"id":17092,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16614,"src":"7933:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}],"id":17091,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7925:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17090,"name":"address","nodeType":"ElementaryTypeName","src":"7925:7:72","typeDescriptions":{}}},"id":17093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7925:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17088,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16611,"src":"7895:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"id":17089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7902:22:72","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":3403,"src":"7895:29:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":17094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7895:44:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7851:88:72"},{"assignments":[17097],"declarations":[{"constant":false,"id":17097,"mutability":"mutable","name":"k","nameLocation":"9953:1:72","nodeType":"VariableDeclaration","scope":17150,"src":"9945:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17096,"name":"uint256","nodeType":"ElementaryTypeName","src":"9945:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17104,"initialValue":{"arguments":[{"id":17100,"name":"lastBalancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17087,"src":"9979:24:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":17101,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"10005:8:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$3940_$","typeString":"type(enum Rounding)"}},"id":17102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10014:8:72","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":3938,"src":"10005:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$3940","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$3940","typeString":"enum Rounding"}],"expression":{"id":17098,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16614,"src":"9957:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"id":17099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9962:16:72","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1036,"src":"9957:21:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$3940_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":17103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9957:66:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9945:78:72"},{"expression":{"id":17108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17105,"name":"tvl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17068,"src":"10034:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17106,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"10040:10:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4921_$","typeString":"type(library FixedPoint)"}},"id":17107,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10051:3:72","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4633,"src":"10040:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10034:20:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17109,"nodeType":"ExpressionStatement","src":"10034:20:72"},{"body":{"id":17141,"nodeType":"Block","src":"10106:105:72","statements":[{"expression":{"id":17139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17120,"name":"tvl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17068,"src":"10120:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"baseExpression":{"id":17134,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17078,"src":"10188:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17136,"indexExpression":{"id":17135,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17111,"src":"10196:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10188:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"baseExpression":{"id":17129,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17078,"src":"10168:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17131,"indexExpression":{"id":17130,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17111,"src":"10176:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10168:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":17123,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17065,"src":"10138:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":17125,"indexExpression":{"id":17124,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17111,"src":"10145:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10138:9:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10148:9:72","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":11189,"src":"10138:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":17127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10138:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10160:7:72","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4703,"src":"10138:29:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10138:41:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10180:7:72","memberName":"powDown","nodeType":"MemberAccess","referencedDeclaration":4843,"src":"10138:49:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10138:61:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17121,"name":"tvl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17068,"src":"10126:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10130:7:72","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4666,"src":"10126:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10126:74:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10120:80:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17140,"nodeType":"ExpressionStatement","src":"10120:80:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17114,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17111,"src":"10084:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17115,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17071,"src":"10088:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10084:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17142,"initializationExpression":{"assignments":[17111],"declarations":[{"constant":false,"id":17111,"mutability":"mutable","name":"i","nameLocation":"10077:1:72","nodeType":"VariableDeclaration","scope":17142,"src":"10069:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17110,"name":"uint256","nodeType":"ElementaryTypeName","src":"10069:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17113,"initialValue":{"hexValue":"30","id":17112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10081:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10069:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10101:3:72","subExpression":{"id":17117,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17111,"src":"10101:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17119,"nodeType":"ExpressionStatement","src":"10101:3:72"},"nodeType":"ForStatement","src":"10064:147:72"},{"expression":{"id":17148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17143,"name":"tvl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17068,"src":"10221:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17146,"name":"k","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"10239:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17144,"name":"tvl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17068,"src":"10227:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10231:7:72","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4666,"src":"10227:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10227:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10221:20:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17149,"nodeType":"ExpressionStatement","src":"10221:20:72"}]},"documentation":{"id":17062,"nodeType":"StructuredDocumentation","src":"7617:33:72","text":"@inheritdoc IWeightedLPOracle"},"functionSelector":"47bcac3b","id":17151,"implemented":true,"kind":"function","modifiers":[],"name":"calculateTVL","nameLocation":"7664:12:72","nodeType":"FunctionDefinition","parameters":{"id":17066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17065,"mutability":"mutable","name":"prices","nameLocation":"7693:6:72","nodeType":"VariableDeclaration","scope":17151,"src":"7677:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17063,"name":"int256","nodeType":"ElementaryTypeName","src":"7677:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17064,"nodeType":"ArrayTypeName","src":"7677:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"7676:24:72"},"returnParameters":{"id":17069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17068,"mutability":"mutable","name":"tvl","nameLocation":"7730:3:72","nodeType":"VariableDeclaration","scope":17151,"src":"7722:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17067,"name":"uint256","nodeType":"ElementaryTypeName","src":"7722:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7721:13:72"},"scope":17660,"src":"7655:2593:72","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[929],"body":{"id":17241,"nodeType":"Block","src":"10379:612:72","statements":[{"assignments":[17161],"declarations":[{"constant":false,"id":17161,"mutability":"mutable","name":"totalTokens","nameLocation":"10397:11:72","nodeType":"VariableDeclaration","scope":17241,"src":"10389:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17160,"name":"uint256","nodeType":"ElementaryTypeName","src":"10389:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17163,"initialValue":{"id":17162,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"10411:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10389:34:72"},{"assignments":[17168],"declarations":[{"constant":false,"id":17168,"mutability":"mutable","name":"feeds","nameLocation":"10464:5:72","nodeType":"VariableDeclaration","scope":17241,"src":"10433:36:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":17166,"nodeType":"UserDefinedTypeName","pathNode":{"id":17165,"name":"AggregatorV3Interface","nameLocations":["10433:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"10433:21:72"},"referencedDeclaration":8718,"src":"10433:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17167,"nodeType":"ArrayTypeName","src":"10433:23:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"id":17172,"initialValue":{"arguments":[{"id":17170,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17161,"src":"10482:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17169,"name":"_getFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17427,"src":"10472:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (contract AggregatorV3Interface[] memory)"}},"id":17171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10472:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10433:61:72"},{"assignments":[17177],"declarations":[{"constant":false,"id":17177,"mutability":"mutable","name":"feedDecimalScalingFactors","nameLocation":"10521:25:72","nodeType":"VariableDeclaration","scope":17241,"src":"10504:42:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17175,"name":"uint256","nodeType":"ElementaryTypeName","src":"10504:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17176,"nodeType":"ArrayTypeName","src":"10504:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":17181,"initialValue":{"arguments":[{"id":17179,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17161,"src":"10584:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17178,"name":"_getFeedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17543,"src":"10549:34:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (uint256[] memory)"}},"id":17180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10549:47:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10504:92:72"},{"expression":{"id":17188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17182,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17156,"src":"10607:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17186,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17161,"src":"10629:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10616:12:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":17183,"name":"int256","nodeType":"ElementaryTypeName","src":"10620:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17184,"nodeType":"ArrayTypeName","src":"10620:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":17187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10616:25:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"src":"10607:34:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":17189,"nodeType":"ExpressionStatement","src":"10607:34:72"},{"expression":{"id":17196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17190,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17158,"src":"10652:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":17193,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10669:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17192,"name":"uint256","nodeType":"ElementaryTypeName","src":"10669:7:72","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":17191,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10664:4:72","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":17194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10664:13:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":17195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10678:3:72","memberName":"max","nodeType":"MemberAccess","src":"10664:17:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10652:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17197,"nodeType":"ExpressionStatement","src":"10652:29:72"},{"body":{"id":17239,"nodeType":"Block","src":"10733:252:72","statements":[{"assignments":[null,17209,null,17211,null],"declarations":[null,{"constant":false,"id":17209,"mutability":"mutable","name":"answer","nameLocation":"10757:6:72","nodeType":"VariableDeclaration","scope":17239,"src":"10750:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":17208,"name":"int256","nodeType":"ElementaryTypeName","src":"10750:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},null,{"constant":false,"id":17211,"mutability":"mutable","name":"feedUpdatedAt","nameLocation":"10775:13:72","nodeType":"VariableDeclaration","scope":17239,"src":"10767:21:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17210,"name":"uint256","nodeType":"ElementaryTypeName","src":"10767:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":17217,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":17212,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17168,"src":"10794:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17214,"indexExpression":{"id":17213,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17199,"src":"10800:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10794:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10803:15:72","memberName":"latestRoundData","nodeType":"MemberAccess","referencedDeclaration":8717,"src":"10794:24:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"function () view external returns (uint80,int256,uint256,uint256,uint80)"}},"id":17216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10794:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$","typeString":"tuple(uint80,int256,uint256,uint256,uint80)"}},"nodeType":"VariableDeclarationStatement","src":"10747:73:72"},{"expression":{"id":17228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17218,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17156,"src":"10834:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":17220,"indexExpression":{"id":17219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17199,"src":"10841:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10834:9:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":17227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17221,"name":"answer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"10846:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":17222,"name":"feedDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17177,"src":"10855:25:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17224,"indexExpression":{"id":17223,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17199,"src":"10881:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10855:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10884:8:72","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":12025,"src":"10855:37:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":17226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10855:39:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10846:48:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10834:60:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17229,"nodeType":"ExpressionStatement","src":"10834:60:72"},{"expression":{"id":17237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17230,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17158,"src":"10909:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17231,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17158,"src":"10921:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17232,"name":"feedUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17211,"src":"10933:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10921:25:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":17235,"name":"feedUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17211,"src":"10961:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10921:53:72","trueExpression":{"id":17234,"name":"updatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17158,"src":"10949:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10909:65:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17238,"nodeType":"ExpressionStatement","src":"10909:65:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17202,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17199,"src":"10711:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17203,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17161,"src":"10715:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10711:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17240,"initializationExpression":{"assignments":[17199],"declarations":[{"constant":false,"id":17199,"mutability":"mutable","name":"i","nameLocation":"10704:1:72","nodeType":"VariableDeclaration","scope":17240,"src":"10696:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17198,"name":"uint256","nodeType":"ElementaryTypeName","src":"10696:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17201,"initialValue":{"hexValue":"30","id":17200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10708:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10696:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10728:3:72","subExpression":{"id":17205,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17199,"src":"10728:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17207,"nodeType":"ExpressionStatement","src":"10728:3:72"},"nodeType":"ForStatement","src":"10691:294:72"}]},"documentation":{"id":17152,"nodeType":"StructuredDocumentation","src":"10254:33:72","text":"@inheritdoc IWeightedLPOracle"},"functionSelector":"af1296d3","id":17242,"implemented":true,"kind":"function","modifiers":[],"name":"getFeedData","nameLocation":"10301:11:72","nodeType":"FunctionDefinition","parameters":{"id":17153,"nodeType":"ParameterList","parameters":[],"src":"10312:2:72"},"returnParameters":{"id":17159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17156,"mutability":"mutable","name":"prices","nameLocation":"10352:6:72","nodeType":"VariableDeclaration","scope":17242,"src":"10336:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17154,"name":"int256","nodeType":"ElementaryTypeName","src":"10336:6:72","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17155,"nodeType":"ArrayTypeName","src":"10336:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":17158,"mutability":"mutable","name":"updatedAt","nameLocation":"10368:9:72","nodeType":"VariableDeclaration","scope":17242,"src":"10360:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17157,"name":"uint256","nodeType":"ElementaryTypeName","src":"10360:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10335:43:72"},"scope":17660,"src":"10292:699:72","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[937],"body":{"id":17254,"nodeType":"Block","src":"11110:47:72","statements":[{"expression":{"arguments":[{"id":17251,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"11137:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17250,"name":"_getFeeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17427,"src":"11127:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (contract AggregatorV3Interface[] memory)"}},"id":17252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11127:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17249,"id":17253,"nodeType":"Return","src":"11120:30:72"}]},"documentation":{"id":17243,"nodeType":"StructuredDocumentation","src":"10997:33:72","text":"@inheritdoc IWeightedLPOracle"},"functionSelector":"7fe955d4","id":17255,"implemented":true,"kind":"function","modifiers":[],"name":"getFeeds","nameLocation":"11044:8:72","nodeType":"FunctionDefinition","parameters":{"id":17244,"nodeType":"ParameterList","parameters":[],"src":"11052:2:72"},"returnParameters":{"id":17249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17255,"src":"11078:30:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":17246,"nodeType":"UserDefinedTypeName","pathNode":{"id":17245,"name":"AggregatorV3Interface","nameLocations":["11078:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"11078:21:72"},"referencedDeclaration":8718,"src":"11078:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17247,"nodeType":"ArrayTypeName","src":"11078:23:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"src":"11077:32:72"},"scope":17660,"src":"11035:122:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[944],"body":{"id":17266,"nodeType":"Block","src":"11287:72:72","statements":[{"expression":{"arguments":[{"id":17263,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"11339:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17262,"name":"_getFeedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17543,"src":"11304:34:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (uint256[] memory)"}},"id":17264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11304:48:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17261,"id":17265,"nodeType":"Return","src":"11297:55:72"}]},"documentation":{"id":17256,"nodeType":"StructuredDocumentation","src":"11163:33:72","text":"@inheritdoc IWeightedLPOracle"},"functionSelector":"cd2c9e70","id":17267,"implemented":true,"kind":"function","modifiers":[],"name":"getFeedTokenDecimalScalingFactors","nameLocation":"11210:33:72","nodeType":"FunctionDefinition","parameters":{"id":17257,"nodeType":"ParameterList","parameters":[],"src":"11243:2:72"},"returnParameters":{"id":17261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17260,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17267,"src":"11269:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17258,"name":"uint256","nodeType":"ElementaryTypeName","src":"11269:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17259,"nodeType":"ArrayTypeName","src":"11269:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11268:18:72"},"scope":17660,"src":"11201:158:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[951],"body":{"id":17278,"nodeType":"Block","src":"11466:49:72","statements":[{"expression":{"arguments":[{"id":17275,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"11495:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17274,"name":"_getWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17659,"src":"11483:11:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) view returns (uint256[] memory)"}},"id":17276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11483:25:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17273,"id":17277,"nodeType":"Return","src":"11476:32:72"}]},"documentation":{"id":17268,"nodeType":"StructuredDocumentation","src":"11365:33:72","text":"@inheritdoc IWeightedLPOracle"},"functionSelector":"22acb867","id":17279,"implemented":true,"kind":"function","modifiers":[],"name":"getWeights","nameLocation":"11412:10:72","nodeType":"FunctionDefinition","parameters":{"id":17269,"nodeType":"ParameterList","parameters":[],"src":"11422:2:72"},"returnParameters":{"id":17273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17272,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17279,"src":"11448:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17270,"name":"uint256","nodeType":"ElementaryTypeName","src":"11448:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17271,"nodeType":"ArrayTypeName","src":"11448:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11447:18:72"},"scope":17660,"src":"11403:112:72","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":17308,"nodeType":"Block","src":"11628:206:72","statements":[{"assignments":[17288],"declarations":[{"constant":false,"id":17288,"mutability":"mutable","name":"feedDecimals","nameLocation":"11646:12:72","nodeType":"VariableDeclaration","scope":17308,"src":"11638:20:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17287,"name":"uint256","nodeType":"ElementaryTypeName","src":"11638:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17292,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17289,"name":"feed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17282,"src":"11661:4:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11666:8:72","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":8679,"src":"11661:13:72","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":17291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11661:15:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"11638:38:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17293,"name":"feedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17288,"src":"11691:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":17294,"name":"_WAD_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16608,"src":"11706:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11691:28:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17300,"nodeType":"IfStatement","src":"11687:87:72","trueBody":{"id":17299,"nodeType":"Block","src":"11721:53:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17296,"name":"UnsupportedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16605,"src":"11742:19:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11742:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17298,"nodeType":"RevertStatement","src":"11735:28:72"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":17301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11791:2:72","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17302,"name":"_WAD_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16608,"src":"11798:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17303,"name":"feedDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17288,"src":"11814:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11798:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17305,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11797:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11791:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17286,"id":17307,"nodeType":"Return","src":"11784:43:72"}]},"id":17309,"implemented":true,"kind":"function","modifiers":[],"name":"_computeFeedTokenDecimalScalingFactor","nameLocation":"11530:37:72","nodeType":"FunctionDefinition","parameters":{"id":17283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17282,"mutability":"mutable","name":"feed","nameLocation":"11590:4:72","nodeType":"VariableDeclaration","scope":17309,"src":"11568:26:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":17281,"nodeType":"UserDefinedTypeName","pathNode":{"id":17280,"name":"AggregatorV3Interface","nameLocations":["11568:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"11568:21:72"},"referencedDeclaration":8718,"src":"11568:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"}],"src":"11567:28:72"},"returnParameters":{"id":17286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17309,"src":"11619:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17284,"name":"uint256","nodeType":"ElementaryTypeName","src":"11619:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11618:9:72"},"scope":17660,"src":"11521:313:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17426,"nodeType":"Block","src":"11943:720:72","statements":[{"assignments":[17322],"declarations":[{"constant":false,"id":17322,"mutability":"mutable","name":"feeds","nameLocation":"11984:5:72","nodeType":"VariableDeclaration","scope":17426,"src":"11953:36:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":17320,"nodeType":"UserDefinedTypeName","pathNode":{"id":17319,"name":"AggregatorV3Interface","nameLocations":["11953:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"11953:21:72"},"referencedDeclaration":8718,"src":"11953:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17321,"nodeType":"ArrayTypeName","src":"11953:23:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"id":17329,"initialValue":{"arguments":[{"id":17327,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12020:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17326,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11992:27:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (contract AggregatorV3Interface[] memory)"},"typeName":{"baseType":{"id":17324,"nodeType":"UserDefinedTypeName","pathNode":{"id":17323,"name":"AggregatorV3Interface","nameLocations":["11996:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"11996:21:72"},"referencedDeclaration":8718,"src":"11996:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17325,"nodeType":"ArrayTypeName","src":"11996:23:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}}},"id":17328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11992:40:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"nodeType":"VariableDeclarationStatement","src":"11953:79:72"},{"id":17423,"nodeType":"Block","src":"12070:564:72","statements":[{"expression":{"id":17334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17330,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12084:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17332,"indexExpression":{"hexValue":"30","id":17331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12090:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12084:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17333,"name":"_feedToken0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16639,"src":"12095:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12084:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17335,"nodeType":"ExpressionStatement","src":"12084:22:72"},{"expression":{"id":17340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17336,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12120:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17338,"indexExpression":{"hexValue":"31","id":17337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12126:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12120:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17339,"name":"_feedToken1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16642,"src":"12131:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12120:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17341,"nodeType":"ExpressionStatement","src":"12120:22:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17342,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12160:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":17343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12174:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12160:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17354,"nodeType":"Block","src":"12210:17:72","statements":[{"expression":{"id":17352,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12219:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17317,"id":17353,"nodeType":"Return","src":"12212:12:72"}]},"id":17355,"nodeType":"IfStatement","src":"12156:71:72","trueBody":{"id":17351,"nodeType":"Block","src":"12177:27:72","statements":[{"expression":{"id":17349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17345,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12179:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17347,"indexExpression":{"hexValue":"32","id":17346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12185:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12179:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17348,"name":"_feedToken2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16645,"src":"12190:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12179:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17350,"nodeType":"ExpressionStatement","src":"12179:22:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17356,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12244:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"33","id":17357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12258:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"12244:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17368,"nodeType":"Block","src":"12294:17:72","statements":[{"expression":{"id":17366,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12303:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17317,"id":17367,"nodeType":"Return","src":"12296:12:72"}]},"id":17369,"nodeType":"IfStatement","src":"12240:71:72","trueBody":{"id":17365,"nodeType":"Block","src":"12261:27:72","statements":[{"expression":{"id":17363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17359,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12263:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17361,"indexExpression":{"hexValue":"33","id":17360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12269:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12263:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17362,"name":"_feedToken3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"12274:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12263:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17364,"nodeType":"ExpressionStatement","src":"12263:22:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17370,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12328:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"34","id":17371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12342:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12328:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17382,"nodeType":"Block","src":"12378:17:72","statements":[{"expression":{"id":17380,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12387:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17317,"id":17381,"nodeType":"Return","src":"12380:12:72"}]},"id":17383,"nodeType":"IfStatement","src":"12324:71:72","trueBody":{"id":17379,"nodeType":"Block","src":"12345:27:72","statements":[{"expression":{"id":17377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17373,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12347:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17375,"indexExpression":{"hexValue":"34","id":17374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12353:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12347:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17376,"name":"_feedToken4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16651,"src":"12358:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12347:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17378,"nodeType":"ExpressionStatement","src":"12347:22:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17384,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12412:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"35","id":17385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12426:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"12412:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17396,"nodeType":"Block","src":"12462:17:72","statements":[{"expression":{"id":17394,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12471:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17317,"id":17395,"nodeType":"Return","src":"12464:12:72"}]},"id":17397,"nodeType":"IfStatement","src":"12408:71:72","trueBody":{"id":17393,"nodeType":"Block","src":"12429:27:72","statements":[{"expression":{"id":17391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17387,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12431:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17389,"indexExpression":{"hexValue":"35","id":17388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12437:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12431:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17390,"name":"_feedToken5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16654,"src":"12442:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12431:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17392,"nodeType":"ExpressionStatement","src":"12431:22:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17398,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12496:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"36","id":17399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12510:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"12496:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17410,"nodeType":"Block","src":"12546:17:72","statements":[{"expression":{"id":17408,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12555:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17317,"id":17409,"nodeType":"Return","src":"12548:12:72"}]},"id":17411,"nodeType":"IfStatement","src":"12492:71:72","trueBody":{"id":17407,"nodeType":"Block","src":"12513:27:72","statements":[{"expression":{"id":17405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17401,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12515:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17403,"indexExpression":{"hexValue":"36","id":17402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12521:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12515:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17404,"name":"_feedToken6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16657,"src":"12526:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12515:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17406,"nodeType":"ExpressionStatement","src":"12515:22:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17412,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"12580:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":17413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12594:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"12580:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17422,"nodeType":"IfStatement","src":"12576:48:72","trueBody":{"id":17421,"nodeType":"Block","src":"12597:27:72","statements":[{"expression":{"id":17419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17415,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12599:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"id":17417,"indexExpression":{"hexValue":"37","id":17416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12605:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12599:8:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17418,"name":"_feedToken7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16660,"src":"12610:11:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"src":"12599:22:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17420,"nodeType":"ExpressionStatement","src":"12599:22:72"}]}}]},{"expression":{"id":17424,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17322,"src":"12651:5:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},"functionReturnParameters":17317,"id":17425,"nodeType":"Return","src":"12644:12:72"}]},"id":17427,"implemented":true,"kind":"function","modifiers":[],"name":"_getFeeds","nameLocation":"11849:9:72","nodeType":"FunctionDefinition","parameters":{"id":17312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17311,"mutability":"mutable","name":"totalTokens","nameLocation":"11867:11:72","nodeType":"VariableDeclaration","scope":17427,"src":"11859:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17310,"name":"uint256","nodeType":"ElementaryTypeName","src":"11859:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11858:21:72"},"returnParameters":{"id":17317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17427,"src":"11911:30:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":17314,"nodeType":"UserDefinedTypeName","pathNode":{"id":17313,"name":"AggregatorV3Interface","nameLocations":["11911:21:72"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"11911:21:72"},"referencedDeclaration":8718,"src":"11911:21:72","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17315,"nodeType":"ArrayTypeName","src":"11911:23:72","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"src":"11910:32:72"},"scope":17660,"src":"11840:823:72","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":17542,"nodeType":"Block","src":"12775:1310:72","statements":[{"assignments":[17439],"declarations":[{"constant":false,"id":17439,"mutability":"mutable","name":"feedTokenDecimalScalingFactors","nameLocation":"12802:30:72","nodeType":"VariableDeclaration","scope":17542,"src":"12785:47:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17437,"name":"uint256","nodeType":"ElementaryTypeName","src":"12785:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17438,"nodeType":"ArrayTypeName","src":"12785:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":17445,"initialValue":{"arguments":[{"id":17443,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"12849:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"12835:13:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":17440,"name":"uint256","nodeType":"ElementaryTypeName","src":"12839:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17441,"nodeType":"ArrayTypeName","src":"12839:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":17444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12835:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12785:76:72"},{"id":17539,"nodeType":"Block","src":"12899:1132:72","statements":[{"expression":{"id":17450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17446,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"12913:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17448,"indexExpression":{"hexValue":"30","id":17447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12944:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12913:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17449,"name":"_feedToken0DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16662,"src":"12949:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12913:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17451,"nodeType":"ExpressionStatement","src":"12913:67:72"},{"expression":{"id":17456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17452,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"12994:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17454,"indexExpression":{"hexValue":"31","id":17453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13025:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12994:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17455,"name":"_feedToken1DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16664,"src":"13030:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12994:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17457,"nodeType":"ExpressionStatement","src":"12994:67:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17458,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"13079:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":17459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13093:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"13079:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17470,"nodeType":"Block","src":"13191:42:72","statements":[{"expression":{"id":17468,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13200:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17434,"id":17469,"nodeType":"Return","src":"13193:37:72"}]},"id":17471,"nodeType":"IfStatement","src":"13075:158:72","trueBody":{"id":17467,"nodeType":"Block","src":"13096:72:72","statements":[{"expression":{"id":17465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17461,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13098:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17463,"indexExpression":{"hexValue":"32","id":17462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13129:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13098:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17464,"name":"_feedToken2DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16666,"src":"13134:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13098:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17466,"nodeType":"ExpressionStatement","src":"13098:67:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17472,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"13250:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"33","id":17473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13264:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"13250:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17484,"nodeType":"Block","src":"13361:42:72","statements":[{"expression":{"id":17482,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13370:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17434,"id":17483,"nodeType":"Return","src":"13363:37:72"}]},"id":17485,"nodeType":"IfStatement","src":"13246:157:72","trueBody":{"id":17481,"nodeType":"Block","src":"13267:72:72","statements":[{"expression":{"id":17479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17475,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13269:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17477,"indexExpression":{"hexValue":"33","id":17476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13300:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13269:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17478,"name":"_feedToken3DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16668,"src":"13305:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13269:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17480,"nodeType":"ExpressionStatement","src":"13269:67:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17486,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"13420:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"34","id":17487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13434:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"13420:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17498,"nodeType":"Block","src":"13531:42:72","statements":[{"expression":{"id":17496,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13540:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17434,"id":17497,"nodeType":"Return","src":"13533:37:72"}]},"id":17499,"nodeType":"IfStatement","src":"13416:157:72","trueBody":{"id":17495,"nodeType":"Block","src":"13437:72:72","statements":[{"expression":{"id":17493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17489,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13439:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17491,"indexExpression":{"hexValue":"34","id":17490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13470:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13439:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17492,"name":"_feedToken4DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16670,"src":"13475:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13439:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17494,"nodeType":"ExpressionStatement","src":"13439:67:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17500,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"13590:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"35","id":17501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13604:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"13590:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17512,"nodeType":"Block","src":"13702:42:72","statements":[{"expression":{"id":17510,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13711:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17434,"id":17511,"nodeType":"Return","src":"13704:37:72"}]},"id":17513,"nodeType":"IfStatement","src":"13586:158:72","trueBody":{"id":17509,"nodeType":"Block","src":"13607:72:72","statements":[{"expression":{"id":17507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17503,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13609:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17505,"indexExpression":{"hexValue":"35","id":17504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13640:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13609:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17506,"name":"_feedToken5DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16672,"src":"13645:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13609:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17508,"nodeType":"ExpressionStatement","src":"13609:67:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17514,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"13761:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"36","id":17515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13775:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"13761:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17526,"nodeType":"Block","src":"13873:42:72","statements":[{"expression":{"id":17524,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13882:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17434,"id":17525,"nodeType":"Return","src":"13875:37:72"}]},"id":17527,"nodeType":"IfStatement","src":"13757:158:72","trueBody":{"id":17523,"nodeType":"Block","src":"13778:72:72","statements":[{"expression":{"id":17521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17517,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13780:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17519,"indexExpression":{"hexValue":"36","id":17518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13811:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13780:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17520,"name":"_feedToken6DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16674,"src":"13816:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13780:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17522,"nodeType":"ExpressionStatement","src":"13780:67:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17528,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17429,"src":"13932:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":17529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13946:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"13932:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17538,"nodeType":"IfStatement","src":"13928:93:72","trueBody":{"id":17537,"nodeType":"Block","src":"13949:72:72","statements":[{"expression":{"id":17535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17531,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"13951:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17533,"indexExpression":{"hexValue":"37","id":17532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13982:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13951:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17534,"name":"_feedToken7DecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16676,"src":"13987:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13951:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17536,"nodeType":"ExpressionStatement","src":"13951:67:72"}]}}]},{"expression":{"id":17540,"name":"feedTokenDecimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"14048:30:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17434,"id":17541,"nodeType":"Return","src":"14041:37:72"}]},"id":17543,"implemented":true,"kind":"function","modifiers":[],"name":"_getFeedTokenDecimalScalingFactors","nameLocation":"12678:34:72","nodeType":"FunctionDefinition","parameters":{"id":17430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17429,"mutability":"mutable","name":"totalTokens","nameLocation":"12721:11:72","nodeType":"VariableDeclaration","scope":17543,"src":"12713:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17428,"name":"uint256","nodeType":"ElementaryTypeName","src":"12713:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12712:21:72"},"returnParameters":{"id":17434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17433,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17543,"src":"12757:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17431,"name":"uint256","nodeType":"ElementaryTypeName","src":"12757:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17432,"nodeType":"ArrayTypeName","src":"12757:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12756:18:72"},"scope":17660,"src":"12669:1416:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17658,"nodeType":"Block","src":"14174:698:72","statements":[{"assignments":[17555],"declarations":[{"constant":false,"id":17555,"mutability":"mutable","name":"weights","nameLocation":"14201:7:72","nodeType":"VariableDeclaration","scope":17658,"src":"14184:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17553,"name":"uint256","nodeType":"ElementaryTypeName","src":"14184:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17554,"nodeType":"ArrayTypeName","src":"14184:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":17561,"initialValue":{"arguments":[{"id":17559,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14225:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17558,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14211:13:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":17556,"name":"uint256","nodeType":"ElementaryTypeName","src":"14215:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17557,"nodeType":"ArrayTypeName","src":"14215:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":17560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14211:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14184:53:72"},{"id":17655,"nodeType":"Block","src":"14275:566:72","statements":[{"expression":{"id":17566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17562,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14289:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17564,"indexExpression":{"hexValue":"30","id":17563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14297:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14289:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17565,"name":"_weight0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16622,"src":"14302:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14289:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17567,"nodeType":"ExpressionStatement","src":"14289:21:72"},{"expression":{"id":17572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17568,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14324:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17570,"indexExpression":{"hexValue":"31","id":17569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14332:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14324:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17571,"name":"_weight1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16624,"src":"14337:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14324:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17573,"nodeType":"ExpressionStatement","src":"14324:21:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17574,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14363:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":17575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14377:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"14363:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17586,"nodeType":"Block","src":"14412:19:72","statements":[{"expression":{"id":17584,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14421:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17550,"id":17585,"nodeType":"Return","src":"14414:14:72"}]},"id":17587,"nodeType":"IfStatement","src":"14359:72:72","trueBody":{"id":17583,"nodeType":"Block","src":"14380:26:72","statements":[{"expression":{"id":17581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17577,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14382:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17579,"indexExpression":{"hexValue":"32","id":17578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14390:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14382:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17580,"name":"_weight2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16626,"src":"14395:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14382:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17582,"nodeType":"ExpressionStatement","src":"14382:21:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17588,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14448:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"33","id":17589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14462:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"14448:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17600,"nodeType":"Block","src":"14497:19:72","statements":[{"expression":{"id":17598,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14506:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17550,"id":17599,"nodeType":"Return","src":"14499:14:72"}]},"id":17601,"nodeType":"IfStatement","src":"14444:72:72","trueBody":{"id":17597,"nodeType":"Block","src":"14465:26:72","statements":[{"expression":{"id":17595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17591,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14467:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17593,"indexExpression":{"hexValue":"33","id":17592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14475:1:72","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14467:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17594,"name":"_weight3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16628,"src":"14480:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14467:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17596,"nodeType":"ExpressionStatement","src":"14467:21:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17602,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14533:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"34","id":17603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14547:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"14533:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17614,"nodeType":"Block","src":"14582:19:72","statements":[{"expression":{"id":17612,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14591:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17550,"id":17613,"nodeType":"Return","src":"14584:14:72"}]},"id":17615,"nodeType":"IfStatement","src":"14529:72:72","trueBody":{"id":17611,"nodeType":"Block","src":"14550:26:72","statements":[{"expression":{"id":17609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17605,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14552:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17607,"indexExpression":{"hexValue":"34","id":17606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14560:1:72","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14552:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17608,"name":"_weight4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16630,"src":"14565:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14552:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17610,"nodeType":"ExpressionStatement","src":"14552:21:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17616,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14618:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"35","id":17617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14632:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"14618:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17628,"nodeType":"Block","src":"14667:19:72","statements":[{"expression":{"id":17626,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14676:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17550,"id":17627,"nodeType":"Return","src":"14669:14:72"}]},"id":17629,"nodeType":"IfStatement","src":"14614:72:72","trueBody":{"id":17625,"nodeType":"Block","src":"14635:26:72","statements":[{"expression":{"id":17623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17619,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14637:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17621,"indexExpression":{"hexValue":"35","id":17620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14645:1:72","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14637:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17622,"name":"_weight5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16632,"src":"14650:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14637:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17624,"nodeType":"ExpressionStatement","src":"14637:21:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17630,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14703:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"36","id":17631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14717:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"14703:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17642,"nodeType":"Block","src":"14752:19:72","statements":[{"expression":{"id":17640,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14761:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17550,"id":17641,"nodeType":"Return","src":"14754:14:72"}]},"id":17643,"nodeType":"IfStatement","src":"14699:72:72","trueBody":{"id":17639,"nodeType":"Block","src":"14720:26:72","statements":[{"expression":{"id":17637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17633,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14722:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17635,"indexExpression":{"hexValue":"36","id":17634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14730:1:72","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14722:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17636,"name":"_weight6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16634,"src":"14735:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14722:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17638,"nodeType":"ExpressionStatement","src":"14722:21:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17644,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"14788:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":17645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14802:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"14788:15:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17654,"nodeType":"IfStatement","src":"14784:47:72","trueBody":{"id":17653,"nodeType":"Block","src":"14805:26:72","statements":[{"expression":{"id":17651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17647,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14807:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17649,"indexExpression":{"hexValue":"37","id":17648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14815:1:72","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14807:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17650,"name":"_weight7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16636,"src":"14820:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14807:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17652,"nodeType":"ExpressionStatement","src":"14807:21:72"}]}}]},{"expression":{"id":17656,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17555,"src":"14858:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":17550,"id":17657,"nodeType":"Return","src":"14851:14:72"}]},"id":17659,"implemented":true,"kind":"function","modifiers":[],"name":"_getWeights","nameLocation":"14100:11:72","nodeType":"FunctionDefinition","parameters":{"id":17546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17545,"mutability":"mutable","name":"totalTokens","nameLocation":"14120:11:72","nodeType":"VariableDeclaration","scope":17659,"src":"14112:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17544,"name":"uint256","nodeType":"ElementaryTypeName","src":"14112:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14111:21:72"},"returnParameters":{"id":17550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17659,"src":"14156:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17547,"name":"uint256","nodeType":"ElementaryTypeName","src":"14156:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17548,"nodeType":"ArrayTypeName","src":"14156:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"14155:18:72"},"scope":17660,"src":"14091:781:72","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":17661,"src":"1021:13853:72","usedErrors":[4200,4630,4927,4930,4933,4936,10286,10298,16605],"usedEvents":[]}],"src":"46:14829:72"},"id":72},"contracts/WeightedLPOracleFactory.sol":{"ast":{"absolutePath":"contracts/WeightedLPOracleFactory.sol","exportedSymbols":{"AggregatorV3Interface":[8718],"FixedPoint":[4921],"IERC20":[9632],"IERC20Metadata":[9658],"IVault":[2319],"IWeightedLPOracle":[952],"IWeightedLPOracleFactory":[993],"IWeightedPool":[66],"InputHelpers":[4492],"Rounding":[3940],"SafeCast":[12026],"SingletonAuthentication":[8623],"WeightedLPOracle":[17660],"WeightedLPOracleFactory":[17773]},"id":17774,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17662,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:73"},{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","file":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","id":17664,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":8719,"src":"72:114:73","symbolAliases":[{"foreign":{"id":17663,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"81:21:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":17666,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":9659,"src":"187:99:73","symbolAliases":[{"foreign":{"id":17665,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9658,"src":"196:14:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":17668,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":12027,"src":"287:75:73","symbolAliases":[{"foreign":{"id":17667,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12026,"src":"296:8:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":17670,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":9633,"src":"363:72:73","symbolAliases":[{"foreign":{"id":17669,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"372:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol","id":17672,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":953,"src":"437:114:73","symbolAliases":[{"foreign":{"id":17671,"name":"IWeightedLPOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":952,"src":"446:17:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol","id":17674,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":994,"src":"552:132:73","symbolAliases":[{"foreign":{"id":17673,"name":"IWeightedLPOracleFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":993,"src":"565:24:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":17676,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":8624,"src":"685:104:73","symbolAliases":[{"foreign":{"id":17675,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8623,"src":"694:23:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","id":17678,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":67,"src":"790:103:73","symbolAliases":[{"foreign":{"id":17677,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"799:13:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":17680,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":4080,"src":"894:87:73","symbolAliases":[{"foreign":{"id":17679,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3940,"src":"903:8:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":17682,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":2320,"src":"982:81:73","symbolAliases":[{"foreign":{"id":17681,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"991:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":17684,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":4493,"src":"1065:99:73","symbolAliases":[{"foreign":{"id":17683,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"1074:12:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":17686,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":4922,"src":"1165:92:73","symbolAliases":[{"foreign":{"id":17685,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"1174:10:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/WeightedLPOracle.sol","file":"./WeightedLPOracle.sol","id":17688,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17774,"sourceUnit":17661,"src":"1259:58:73","symbolAliases":[{"foreign":{"id":17687,"name":"WeightedLPOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17660,"src":"1268:16:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17689,"name":"IWeightedLPOracleFactory","nameLocations":["1355:24:73"],"nodeType":"IdentifierPath","referencedDeclaration":993,"src":"1355:24:73"},"id":17690,"nodeType":"InheritanceSpecifier","src":"1355:24:73"},{"baseName":{"id":17691,"name":"SingletonAuthentication","nameLocations":["1381:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"1381:23:73"},"id":17692,"nodeType":"InheritanceSpecifier","src":"1381:23:73"}],"canonicalName":"WeightedLPOracleFactory","contractDependencies":[17660],"contractKind":"contract","fullyImplemented":true,"id":17773,"linearizedBaseContracts":[17773,8623,6869,4159,81,993],"name":"WeightedLPOracleFactory","nameLocation":"1328:23:73","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":17694,"mutability":"mutable","name":"_oracleVersion","nameLocation":"1428:14:73","nodeType":"VariableDeclaration","scope":17773,"src":"1411:31:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17693,"name":"uint256","nodeType":"ElementaryTypeName","src":"1411:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17700,"mutability":"mutable","name":"_oracles","nameLocation":"1501:8:73","nodeType":"VariableDeclaration","scope":17773,"src":"1448:61:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IWeightedPool_$66_$_t_contract$_IWeightedLPOracle_$952_$","typeString":"mapping(contract IWeightedPool => contract IWeightedLPOracle)"},"typeName":{"id":17699,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":17696,"nodeType":"UserDefinedTypeName","pathNode":{"id":17695,"name":"IWeightedPool","nameLocations":["1456:13:73"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"1456:13:73"},"referencedDeclaration":66,"src":"1456:13:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"nodeType":"Mapping","src":"1448:43:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IWeightedPool_$66_$_t_contract$_IWeightedLPOracle_$952_$","typeString":"mapping(contract IWeightedPool => contract IWeightedLPOracle)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17698,"nodeType":"UserDefinedTypeName","pathNode":{"id":17697,"name":"IWeightedLPOracle","nameLocations":["1473:17:73"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"1473:17:73"},"referencedDeclaration":952,"src":"1473:17:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}}},"visibility":"internal"},{"body":{"id":17715,"nodeType":"Block","src":"1596:47:73","statements":[{"expression":{"id":17713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17711,"name":"_oracleVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17694,"src":"1606:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17712,"name":"oracleVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17705,"src":"1623:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1606:30:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17714,"nodeType":"ExpressionStatement","src":"1606:30:73"}]},"id":17716,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":17708,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17703,"src":"1589:5:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}}],"id":17709,"kind":"baseConstructorSpecifier","modifierName":{"id":17707,"name":"SingletonAuthentication","nameLocations":["1565:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":8623,"src":"1565:23:73"},"nodeType":"ModifierInvocation","src":"1565:30:73"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17703,"mutability":"mutable","name":"vault","nameLocation":"1535:5:73","nodeType":"VariableDeclaration","scope":17716,"src":"1528:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":17702,"nodeType":"UserDefinedTypeName","pathNode":{"id":17701,"name":"IVault","nameLocations":["1528:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"1528:6:73"},"referencedDeclaration":2319,"src":"1528:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":17705,"mutability":"mutable","name":"oracleVersion","nameLocation":"1550:13:73","nodeType":"VariableDeclaration","scope":17716,"src":"1542:21:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17704,"name":"uint256","nodeType":"ElementaryTypeName","src":"1542:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1527:37:73"},"returnParameters":{"id":17710,"nodeType":"ParameterList","parameters":[],"src":"1596:0:73"},"scope":17773,"src":"1516:127:73","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[983],"body":{"id":17755,"nodeType":"Block","src":"1802:189:73","statements":[{"expression":{"id":17741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17731,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17729,"src":"1812:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":17735,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"1842:8:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2319_$","typeString":"function () view returns (contract IVault)"}},"id":17736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1842:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},{"id":17737,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"1854:4:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},{"id":17738,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17723,"src":"1860:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},{"id":17739,"name":"_oracleVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17694,"src":"1867:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"1821:20:73","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_contract$_IVault_$2319_$_t_contract$_IWeightedPool_$66_$_t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr_$_t_uint256_$returns$_t_contract$_WeightedLPOracle_$17660_$","typeString":"function (contract IVault,contract IWeightedPool,contract AggregatorV3Interface[] memory,uint256) returns (contract WeightedLPOracle)"},"typeName":{"id":17733,"nodeType":"UserDefinedTypeName","pathNode":{"id":17732,"name":"WeightedLPOracle","nameLocations":["1825:16:73"],"nodeType":"IdentifierPath","referencedDeclaration":17660,"src":"1825:16:73"},"referencedDeclaration":17660,"src":"1825:16:73","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedLPOracle_$17660","typeString":"contract WeightedLPOracle"}}},"id":17740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:61:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_WeightedLPOracle_$17660","typeString":"contract WeightedLPOracle"}},"src":"1812:70:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"id":17742,"nodeType":"ExpressionStatement","src":"1812:70:73"},{"expression":{"id":17747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17743,"name":"_oracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"1893:8:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IWeightedPool_$66_$_t_contract$_IWeightedLPOracle_$952_$","typeString":"mapping(contract IWeightedPool => contract IWeightedLPOracle)"}},"id":17745,"indexExpression":{"id":17744,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"1902:4:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1893:14:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17746,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17729,"src":"1910:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"src":"1893:23:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"id":17748,"nodeType":"ExpressionStatement","src":"1893:23:73"},{"eventCall":{"arguments":[{"id":17750,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"1955:4:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},{"id":17751,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17729,"src":"1961:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},{"id":17752,"name":"_oracleVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17694,"src":"1969:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17749,"name":"WeightedLPOracleCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":970,"src":"1931:23:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IWeightedPool_$66_$_t_contract$_IWeightedLPOracle_$952_$_t_uint256_$returns$__$","typeString":"function (contract IWeightedPool,contract IWeightedLPOracle,uint256)"}},"id":17753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1931:53:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17754,"nodeType":"EmitStatement","src":"1926:58:73"}]},"functionSelector":"cd1d9776","id":17756,"implemented":true,"kind":"function","modifiers":[{"id":17726,"kind":"modifierInvocation","modifierName":{"id":17725,"name":"authenticate","nameLocations":["1754:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4107,"src":"1754:12:73"},"nodeType":"ModifierInvocation","src":"1754:12:73"}],"name":"create","nameLocation":"1658:6:73","nodeType":"FunctionDefinition","parameters":{"id":17724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17719,"mutability":"mutable","name":"pool","nameLocation":"1688:4:73","nodeType":"VariableDeclaration","scope":17756,"src":"1674:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":17718,"nodeType":"UserDefinedTypeName","pathNode":{"id":17717,"name":"IWeightedPool","nameLocations":["1674:13:73"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"1674:13:73"},"referencedDeclaration":66,"src":"1674:13:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"},{"constant":false,"id":17723,"mutability":"mutable","name":"feeds","nameLocation":"1733:5:73","nodeType":"VariableDeclaration","scope":17756,"src":"1702:36:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":17721,"nodeType":"UserDefinedTypeName","pathNode":{"id":17720,"name":"AggregatorV3Interface","nameLocations":["1702:21:73"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"1702:21:73"},"referencedDeclaration":8718,"src":"1702:21:73","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":17722,"nodeType":"ArrayTypeName","src":"1702:23:73","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"}],"src":"1664:80:73"},"returnParameters":{"id":17730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17729,"mutability":"mutable","name":"oracle","nameLocation":"1794:6:73","nodeType":"VariableDeclaration","scope":17756,"src":"1776:24:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"},"typeName":{"id":17728,"nodeType":"UserDefinedTypeName","pathNode":{"id":17727,"name":"IWeightedLPOracle","nameLocations":["1776:17:73"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"1776:17:73"},"referencedDeclaration":952,"src":"1776:17:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"visibility":"internal"}],"src":"1775:26:73"},"scope":17773,"src":"1649:342:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[992],"body":{"id":17771,"nodeType":"Block","src":"2085:40:73","statements":[{"expression":{"id":17769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17765,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17763,"src":"2095:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":17766,"name":"_oracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"2104:8:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IWeightedPool_$66_$_t_contract$_IWeightedLPOracle_$952_$","typeString":"mapping(contract IWeightedPool => contract IWeightedLPOracle)"}},"id":17768,"indexExpression":{"id":17767,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17759,"src":"2113:4:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2104:14:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"src":"2095:23:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"id":17770,"nodeType":"ExpressionStatement","src":"2095:23:73"}]},"functionSelector":"10d3d22e","id":17772,"implemented":true,"kind":"function","modifiers":[],"name":"getOracle","nameLocation":"2006:9:73","nodeType":"FunctionDefinition","parameters":{"id":17760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17759,"mutability":"mutable","name":"pool","nameLocation":"2030:4:73","nodeType":"VariableDeclaration","scope":17772,"src":"2016:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":17758,"nodeType":"UserDefinedTypeName","pathNode":{"id":17757,"name":"IWeightedPool","nameLocations":["2016:13:73"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"2016:13:73"},"referencedDeclaration":66,"src":"2016:13:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"}],"src":"2015:20:73"},"returnParameters":{"id":17764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17763,"mutability":"mutable","name":"oracle","nameLocation":"2077:6:73","nodeType":"VariableDeclaration","scope":17772,"src":"2059:24:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"},"typeName":{"id":17762,"nodeType":"UserDefinedTypeName","pathNode":{"id":17761,"name":"IWeightedLPOracle","nameLocations":["2059:17:73"],"nodeType":"IdentifierPath","referencedDeclaration":952,"src":"2059:17:73"},"referencedDeclaration":952,"src":"2059:17:73","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedLPOracle_$952","typeString":"contract IWeightedLPOracle"}},"visibility":"internal"}],"src":"2058:26:73"},"scope":17773,"src":"1997:128:73","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":17774,"src":"1319:808:73","usedErrors":[72,6689],"usedEvents":[970]}],"src":"46:2082:73"},"id":73},"contracts/test/FeedMock.sol":{"ast":{"absolutePath":"contracts/test/FeedMock.sol","exportedSymbols":{"AggregatorV3Interface":[8718],"FeedMock":[17896]},"id":17897,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17775,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:74"},{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","file":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","id":17777,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17897,"sourceUnit":8719,"src":"72:114:74","symbolAliases":[{"foreign":{"id":17776,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"81:21:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17778,"name":"AggregatorV3Interface","nameLocations":["209:21:74"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"209:21:74"},"id":17779,"nodeType":"InheritanceSpecifier","src":"209:21:74"}],"canonicalName":"FeedMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":17896,"linearizedBaseContracts":[17896,8718],"name":"FeedMock","nameLocation":"197:8:74","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":17781,"mutability":"mutable","name":"_decimals","nameLocation":"254:9:74","nodeType":"VariableDeclaration","scope":17896,"src":"237:26:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17780,"name":"uint256","nodeType":"ElementaryTypeName","src":"237:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17783,"mutability":"mutable","name":"_lastAnswer","nameLocation":"286:11:74","nodeType":"VariableDeclaration","scope":17896,"src":"269:28:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17782,"name":"uint256","nodeType":"ElementaryTypeName","src":"269:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17785,"mutability":"mutable","name":"_lastUpdatedAt","nameLocation":"320:14:74","nodeType":"VariableDeclaration","scope":17896,"src":"303:31:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17784,"name":"uint256","nodeType":"ElementaryTypeName","src":"303:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":17794,"nodeType":"Block","src":"372:38:74","statements":[{"expression":{"id":17792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17790,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17781,"src":"382:9:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17791,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17787,"src":"394:9:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"382:21:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17793,"nodeType":"ExpressionStatement","src":"382:21:74"}]},"id":17795,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17787,"mutability":"mutable","name":"decimals_","nameLocation":"361:9:74","nodeType":"VariableDeclaration","scope":17795,"src":"353:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17786,"name":"uint256","nodeType":"ElementaryTypeName","src":"353:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"352:19:74"},"returnParameters":{"id":17789,"nodeType":"ParameterList","parameters":[],"src":"372:0:74"},"scope":17896,"src":"341:69:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17804,"nodeType":"Block","src":"463:38:74","statements":[{"expression":{"id":17802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17800,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17781,"src":"473:9:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17801,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17797,"src":"485:9:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"473:21:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17803,"nodeType":"ExpressionStatement","src":"473:21:74"}]},"functionSelector":"7a1395aa","id":17805,"implemented":true,"kind":"function","modifiers":[],"name":"setDecimals","nameLocation":"425:11:74","nodeType":"FunctionDefinition","parameters":{"id":17798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17797,"mutability":"mutable","name":"decimals_","nameLocation":"443:9:74","nodeType":"VariableDeclaration","scope":17805,"src":"437:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":17796,"name":"uint8","nodeType":"ElementaryTypeName","src":"437:5:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"436:17:74"},"returnParameters":{"id":17799,"nodeType":"ParameterList","parameters":[],"src":"463:0:74"},"scope":17896,"src":"416:85:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17820,"nodeType":"Block","src":"585:81:74","statements":[{"expression":{"id":17814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17812,"name":"_lastAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17783,"src":"595:11:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17813,"name":"lastAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17807,"src":"609:10:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"595:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17815,"nodeType":"ExpressionStatement","src":"595:24:74"},{"expression":{"id":17818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17816,"name":"_lastUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17785,"src":"629:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17817,"name":"lastUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17809,"src":"646:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"629:30:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17819,"nodeType":"ExpressionStatement","src":"629:30:74"}]},"functionSelector":"cc8fac95","id":17821,"implemented":true,"kind":"function","modifiers":[],"name":"setLastRoundData","nameLocation":"516:16:74","nodeType":"FunctionDefinition","parameters":{"id":17810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17807,"mutability":"mutable","name":"lastAnswer","nameLocation":"541:10:74","nodeType":"VariableDeclaration","scope":17821,"src":"533:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17806,"name":"uint256","nodeType":"ElementaryTypeName","src":"533:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17809,"mutability":"mutable","name":"lastUpdatedAt","nameLocation":"561:13:74","nodeType":"VariableDeclaration","scope":17821,"src":"553:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17808,"name":"uint256","nodeType":"ElementaryTypeName","src":"553:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"532:43:74"},"returnParameters":{"id":17811,"nodeType":"ParameterList","parameters":[],"src":"585:0:74"},"scope":17896,"src":"507:159:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[8679],"body":{"id":17831,"nodeType":"Block","src":"722:40:74","statements":[{"expression":{"arguments":[{"id":17828,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17781,"src":"745:9:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"739:5:74","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":17826,"name":"uint8","nodeType":"ElementaryTypeName","src":"739:5:74","typeDescriptions":{}}},"id":17829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"739:16:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":17825,"id":17830,"nodeType":"Return","src":"732:23:74"}]},"functionSelector":"313ce567","id":17832,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"681:8:74","nodeType":"FunctionDefinition","parameters":{"id":17822,"nodeType":"ParameterList","parameters":[],"src":"689:2:74"},"returnParameters":{"id":17825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17832,"src":"715:5:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":17823,"name":"uint8","nodeType":"ElementaryTypeName","src":"715:5:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"714:7:74"},"scope":17896,"src":"672:90:74","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[8684],"body":{"id":17839,"nodeType":"Block","src":"829:45:74","statements":[{"expression":{"hexValue":"4d6f636b20436861696e6c696e6b2046656564","id":17837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"846:21:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_37bd46e72f13d26aa790a4f34f926d88216556bccf35a7b69e5b268b4ede4036","typeString":"literal_string \"Mock Chainlink Feed\""},"value":"Mock Chainlink Feed"},"functionReturnParameters":17836,"id":17838,"nodeType":"Return","src":"839:28:74"}]},"functionSelector":"7284e416","id":17840,"implemented":true,"kind":"function","modifiers":[],"name":"description","nameLocation":"777:11:74","nodeType":"FunctionDefinition","parameters":{"id":17833,"nodeType":"ParameterList","parameters":[],"src":"788:2:74"},"returnParameters":{"id":17836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17840,"src":"814:13:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17834,"name":"string","nodeType":"ElementaryTypeName","src":"814:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"813:15:74"},"scope":17896,"src":"768:106:74","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[8689],"body":{"id":17847,"nodeType":"Block","src":"931:25:74","statements":[{"expression":{"hexValue":"30","id":17845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"948:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":17844,"id":17846,"nodeType":"Return","src":"941:8:74"}]},"functionSelector":"54fd4d50","id":17848,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"889:7:74","nodeType":"FunctionDefinition","parameters":{"id":17841,"nodeType":"ParameterList","parameters":[],"src":"896:2:74"},"returnParameters":{"id":17844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17848,"src":"922:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17842,"name":"uint256","nodeType":"ElementaryTypeName","src":"922:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"921:9:74"},"scope":17896,"src":"880:76:74","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[8704],"body":{"id":17870,"nodeType":"Block","src":"1150:39:74","statements":[{"expression":{"components":[{"hexValue":"30","id":17863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1168:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1171:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1174:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1177:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":17867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1180:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":17868,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1167:15:74","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":17862,"id":17869,"nodeType":"Return","src":"1160:22:74"}]},"functionSelector":"9a6fc8f5","id":17871,"implemented":true,"kind":"function","modifiers":[],"name":"getRoundData","nameLocation":"971:12:74","nodeType":"FunctionDefinition","parameters":{"id":17851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17871,"src":"993:6:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17849,"name":"uint80","nodeType":"ElementaryTypeName","src":"993:6:74","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"983:22:74"},"returnParameters":{"id":17862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17853,"mutability":"mutable","name":"roundId","nameLocation":"1060:7:74","nodeType":"VariableDeclaration","scope":17871,"src":"1053:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17852,"name":"uint80","nodeType":"ElementaryTypeName","src":"1053:6:74","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":17855,"mutability":"mutable","name":"answer","nameLocation":"1076:6:74","nodeType":"VariableDeclaration","scope":17871,"src":"1069:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":17854,"name":"int256","nodeType":"ElementaryTypeName","src":"1069:6:74","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":17857,"mutability":"mutable","name":"startedAt","nameLocation":"1092:9:74","nodeType":"VariableDeclaration","scope":17871,"src":"1084:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17856,"name":"uint256","nodeType":"ElementaryTypeName","src":"1084:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17859,"mutability":"mutable","name":"updatedAt","nameLocation":"1111:9:74","nodeType":"VariableDeclaration","scope":17871,"src":"1103:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17858,"name":"uint256","nodeType":"ElementaryTypeName","src":"1103:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17861,"mutability":"mutable","name":"answeredInRound","nameLocation":"1129:15:74","nodeType":"VariableDeclaration","scope":17871,"src":"1122:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17860,"name":"uint80","nodeType":"ElementaryTypeName","src":"1122:6:74","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"1052:93:74"},"scope":17896,"src":"962:227:74","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[8717],"body":{"id":17894,"nodeType":"Block","src":"1366:70:74","statements":[{"expression":{"components":[{"hexValue":"30","id":17884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1384:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":17887,"name":"_lastAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17783,"src":"1394:11:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17886,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1387:6:74","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":17885,"name":"int256","nodeType":"ElementaryTypeName","src":"1387:6:74","typeDescriptions":{}}},"id":17888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1387:19:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":17889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1408:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":17890,"name":"_lastUpdatedAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17785,"src":"1411:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":17891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1427:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":17892,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1383:46:74","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_int256_$_t_rational_0_by_1_$_t_uint256_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int256,int_const 0,uint256,int_const 0)"}},"functionReturnParameters":17883,"id":17893,"nodeType":"Return","src":"1376:53:74"}]},"functionSelector":"feaf968c","id":17895,"implemented":true,"kind":"function","modifiers":[],"name":"latestRoundData","nameLocation":"1204:15:74","nodeType":"FunctionDefinition","parameters":{"id":17872,"nodeType":"ParameterList","parameters":[],"src":"1219:2:74"},"returnParameters":{"id":17883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17874,"mutability":"mutable","name":"roundId","nameLocation":"1276:7:74","nodeType":"VariableDeclaration","scope":17895,"src":"1269:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17873,"name":"uint80","nodeType":"ElementaryTypeName","src":"1269:6:74","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"},{"constant":false,"id":17876,"mutability":"mutable","name":"answer","nameLocation":"1292:6:74","nodeType":"VariableDeclaration","scope":17895,"src":"1285:13:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":17875,"name":"int256","nodeType":"ElementaryTypeName","src":"1285:6:74","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":17878,"mutability":"mutable","name":"startedAt","nameLocation":"1308:9:74","nodeType":"VariableDeclaration","scope":17895,"src":"1300:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17877,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17880,"mutability":"mutable","name":"updatedAt","nameLocation":"1327:9:74","nodeType":"VariableDeclaration","scope":17895,"src":"1319:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17879,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17882,"mutability":"mutable","name":"answeredInRound","nameLocation":"1345:15:74","nodeType":"VariableDeclaration","scope":17895,"src":"1338:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":17881,"name":"uint80","nodeType":"ElementaryTypeName","src":"1338:6:74","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"1268:93:74"},"scope":17896,"src":"1195:241:74","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":17897,"src":"188:1250:74","usedErrors":[],"usedEvents":[]}],"src":"46:1393:74"},"id":74},"contracts/test/PriceImpactHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PriceImpactHelperMock.sol","exportedSymbols":{"IRouter":[2249],"IVault":[2319],"PriceImpactHelper":[15442],"PriceImpactHelperMock":[17992]},"id":17993,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17898,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:75"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":17900,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17993,"sourceUnit":2320,"src":"72:81:75","symbolAliases":[{"foreign":{"id":17899,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"81:6:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":17902,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17993,"sourceUnit":2250,"src":"154:83:75","symbolAliases":[{"foreign":{"id":17901,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2249,"src":"163:7:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PriceImpactHelper.sol","file":"../PriceImpactHelper.sol","id":17904,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17993,"sourceUnit":15443,"src":"239:61:75","symbolAliases":[{"foreign":{"id":17903,"name":"PriceImpactHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15442,"src":"248:17:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17905,"name":"PriceImpactHelper","nameLocations":["336:17:75"],"nodeType":"IdentifierPath","referencedDeclaration":15442,"src":"336:17:75"},"id":17906,"nodeType":"InheritanceSpecifier","src":"336:17:75"}],"canonicalName":"PriceImpactHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":17992,"linearizedBaseContracts":[17992,15442,13306],"name":"PriceImpactHelperMock","nameLocation":"311:21:75","nodeType":"ContractDefinition","nodes":[{"body":{"id":17919,"nodeType":"Block","src":"435:2:75","statements":[]},"id":17920,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":17915,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17909,"src":"420:5:75","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},{"id":17916,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17912,"src":"427:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}}],"id":17917,"kind":"baseConstructorSpecifier","modifierName":{"id":17914,"name":"PriceImpactHelper","nameLocations":["402:17:75"],"nodeType":"IdentifierPath","referencedDeclaration":15442,"src":"402:17:75"},"nodeType":"ModifierInvocation","src":"402:32:75"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17909,"mutability":"mutable","name":"vault","nameLocation":"379:5:75","nodeType":"VariableDeclaration","scope":17920,"src":"372:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":17908,"nodeType":"UserDefinedTypeName","pathNode":{"id":17907,"name":"IVault","nameLocations":["372:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"372:6:75"},"referencedDeclaration":2319,"src":"372:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":17912,"mutability":"mutable","name":"router","nameLocation":"394:6:75","nodeType":"VariableDeclaration","scope":17920,"src":"386:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"},"typeName":{"id":17911,"nodeType":"UserDefinedTypeName","pathNode":{"id":17910,"name":"IRouter","nameLocations":["386:7:75"],"nodeType":"IdentifierPath","referencedDeclaration":2249,"src":"386:7:75"},"referencedDeclaration":2249,"src":"386:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2249","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"371:30:75"},"returnParameters":{"id":17918,"nodeType":"ParameterList","parameters":[],"src":"435:0:75"},"scope":17992,"src":"360:77:75","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":17941,"nodeType":"Block","src":"641:100:75","statements":[{"expression":{"arguments":[{"id":17935,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17922,"src":"701:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17936,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"707:10:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17937,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17927,"src":"719:6:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":17938,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17929,"src":"727:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17934,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15171,"src":"658:42:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":17939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"658:76:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":17933,"id":17940,"nodeType":"Return","src":"651:83:75"}]},"functionSelector":"e3a50d82","id":17942,"implemented":true,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"452:41:75","nodeType":"FunctionDefinition","parameters":{"id":17930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17922,"mutability":"mutable","name":"pool","nameLocation":"511:4:75","nodeType":"VariableDeclaration","scope":17942,"src":"503:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17921,"name":"address","nodeType":"ElementaryTypeName","src":"503:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17924,"mutability":"mutable","name":"tokenIndex","nameLocation":"533:10:75","nodeType":"VariableDeclaration","scope":17942,"src":"525:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17923,"name":"uint256","nodeType":"ElementaryTypeName","src":"525:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17927,"mutability":"mutable","name":"deltas","nameLocation":"569:6:75","nodeType":"VariableDeclaration","scope":17942,"src":"553:22:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17925,"name":"int256","nodeType":"ElementaryTypeName","src":"553:6:75","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17926,"nodeType":"ArrayTypeName","src":"553:8:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":17929,"mutability":"mutable","name":"sender","nameLocation":"593:6:75","nodeType":"VariableDeclaration","scope":17942,"src":"585:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17928,"name":"address","nodeType":"ElementaryTypeName","src":"585:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"493:112:75"},"returnParameters":{"id":17933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17932,"mutability":"mutable","name":"deltaBPT","nameLocation":"631:8:75","nodeType":"VariableDeclaration","scope":17942,"src":"624:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":17931,"name":"int256","nodeType":"ElementaryTypeName","src":"624:6:75","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"623:17:75"},"scope":17992,"src":"443:298:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17964,"nodeType":"Block","src":"916:71:75","statements":[{"expression":{"arguments":[{"id":17958,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17944,"src":"948:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17959,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17947,"src":"954:6:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":17960,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17950,"src":"962:9:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":17961,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17952,"src":"973:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17957,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15335,"src":"933:14:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":17962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"933:47:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17956,"id":17963,"nodeType":"Return","src":"926:54:75"}]},"functionSelector":"3b064ca3","id":17965,"implemented":true,"kind":"function","modifiers":[],"name":"zeroOutDeltas","nameLocation":"756:13:75","nodeType":"FunctionDefinition","parameters":{"id":17953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17944,"mutability":"mutable","name":"pool","nameLocation":"787:4:75","nodeType":"VariableDeclaration","scope":17965,"src":"779:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17943,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17947,"mutability":"mutable","name":"deltas","nameLocation":"817:6:75","nodeType":"VariableDeclaration","scope":17965,"src":"801:22:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17945,"name":"int256","nodeType":"ElementaryTypeName","src":"801:6:75","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17946,"nodeType":"ArrayTypeName","src":"801:8:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":17950,"mutability":"mutable","name":"deltaBPTs","nameLocation":"849:9:75","nodeType":"VariableDeclaration","scope":17965,"src":"833:25:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17948,"name":"int256","nodeType":"ElementaryTypeName","src":"833:6:75","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17949,"nodeType":"ArrayTypeName","src":"833:8:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":17952,"mutability":"mutable","name":"sender","nameLocation":"876:6:75","nodeType":"VariableDeclaration","scope":17965,"src":"868:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17951,"name":"address","nodeType":"ElementaryTypeName","src":"868:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"769:119:75"},"returnParameters":{"id":17956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17955,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17965,"src":"907:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17954,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"906:9:75"},"scope":17992,"src":"747:240:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17977,"nodeType":"Block","src":"1074:48:75","statements":[{"expression":{"arguments":[{"id":17974,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17968,"src":"1109:5:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":17973,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15388,"src":"1091:17:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":17975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:24:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17972,"id":17976,"nodeType":"Return","src":"1084:31:75"}]},"functionSelector":"0d4277d1","id":17978,"implemented":true,"kind":"function","modifiers":[],"name":"minPositiveIndex","nameLocation":"1002:16:75","nodeType":"FunctionDefinition","parameters":{"id":17969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17968,"mutability":"mutable","name":"array","nameLocation":"1035:5:75","nodeType":"VariableDeclaration","scope":17978,"src":"1019:21:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17966,"name":"int256","nodeType":"ElementaryTypeName","src":"1019:6:75","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17967,"nodeType":"ArrayTypeName","src":"1019:8:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1018:23:75"},"returnParameters":{"id":17972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17978,"src":"1065:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17970,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1064:9:75"},"scope":17992,"src":"993:129:75","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":17990,"nodeType":"Block","src":"1209:48:75","statements":[{"expression":{"arguments":[{"id":17987,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17981,"src":"1244:5:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":17986,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15441,"src":"1226:17:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":17988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1226:24:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17985,"id":17989,"nodeType":"Return","src":"1219:31:75"}]},"functionSelector":"01ef39ee","id":17991,"implemented":true,"kind":"function","modifiers":[],"name":"maxNegativeIndex","nameLocation":"1137:16:75","nodeType":"FunctionDefinition","parameters":{"id":17982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17981,"mutability":"mutable","name":"array","nameLocation":"1170:5:75","nodeType":"VariableDeclaration","scope":17991,"src":"1154:21:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":17979,"name":"int256","nodeType":"ElementaryTypeName","src":"1154:6:75","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":17980,"nodeType":"ArrayTypeName","src":"1154:8:75","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1153:23:75"},"returnParameters":{"id":17985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17991,"src":"1200:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17983,"name":"uint256","nodeType":"ElementaryTypeName","src":"1200:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1199:9:75"},"scope":17992,"src":"1128:129:75","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":17993,"src":"302:957:75","usedErrors":[4500,4503,9997,10000,10286,10298,13208],"usedEvents":[]}],"src":"46:1214:75"},"id":75},"contracts/test/ProtocolFeeBurnerMock.sol":{"ast":{"absolutePath":"contracts/test/ProtocolFeeBurnerMock.sol","exportedSymbols":{"ERC20TestToken":[6677],"FixedPoint":[4921],"IERC20":[9632],"IProtocolFeeBurner":[718],"ProtocolFeeBurnerMock":[18124],"SafeERC20":[9984]},"id":18125,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17994,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:76"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":17996,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18125,"sourceUnit":9633,"src":"72:72:76","symbolAliases":[{"foreign":{"id":17995,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":17998,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18125,"sourceUnit":9985,"src":"145:84:76","symbolAliases":[{"foreign":{"id":17997,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"154:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18000,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18125,"sourceUnit":719,"src":"231:116:76","symbolAliases":[{"foreign":{"id":17999,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"240:18:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","file":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","id":18002,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18125,"sourceUnit":6678,"src":"349:100:76","symbolAliases":[{"foreign":{"id":18001,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"358:14:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":18004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18125,"sourceUnit":4922,"src":"450:92:76","symbolAliases":[{"foreign":{"id":18003,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"459:10:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18005,"name":"IProtocolFeeBurner","nameLocations":["578:18:76"],"nodeType":"IdentifierPath","referencedDeclaration":718,"src":"578:18:76"},"id":18006,"nodeType":"InheritanceSpecifier","src":"578:18:76"}],"canonicalName":"ProtocolFeeBurnerMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18124,"linearizedBaseContracts":[18124,718],"name":"ProtocolFeeBurnerMock","nameLocation":"553:21:76","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18009,"libraryName":{"id":18007,"name":"FixedPoint","nameLocations":["609:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":4921,"src":"609:10:76"},"nodeType":"UsingForDirective","src":"603:29:76","typeName":{"id":18008,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":18013,"libraryName":{"id":18010,"name":"SafeERC20","nameLocations":["643:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":9984,"src":"643:9:76"},"nodeType":"UsingForDirective","src":"637:27:76","typeName":{"id":18012,"nodeType":"UserDefinedTypeName","pathNode":{"id":18011,"name":"IERC20","nameLocations":["657:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"657:6:76"},"referencedDeclaration":9632,"src":"657:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}},{"constant":false,"id":18017,"mutability":"mutable","name":"_tokenRatio","nameLocation":"686:11:76","nodeType":"VariableDeclaration","scope":18124,"src":"670:44:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18014,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":18015,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4921,"src":"700:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4921_$","typeString":"type(library FixedPoint)"}},"id":18016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"711:3:76","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4633,"src":"700:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":18020,"mutability":"mutable","name":"transferFromEnabled","nameLocation":"726:19:76","nodeType":"VariableDeclaration","scope":18124,"src":"721:31:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18018,"name":"bool","nodeType":"ElementaryTypeName","src":"721:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":{"hexValue":"74727565","id":18019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"748:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"visibility":"internal"},{"baseFunctions":[717],"body":{"id":18102,"nodeType":"Block","src":"1024:818:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18040,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1038:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":18041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1044:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"1038:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":18042,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18037,"src":"1056:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1038:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18048,"nodeType":"IfStatement","src":"1034:78:76","trueBody":{"id":18047,"nodeType":"Block","src":"1066:46:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18044,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":697,"src":"1087:12:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1087:14:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18046,"nodeType":"RevertStatement","src":"1080:21:76"}]}},{"condition":{"id":18049,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18020,"src":"1126:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18063,"nodeType":"IfStatement","src":"1122:125:76","trueBody":{"id":18062,"nodeType":"Block","src":"1147:100:76","statements":[{"expression":{"arguments":[{"expression":{"id":18053,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1187:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1191:6:76","memberName":"sender","nodeType":"MemberAccess","src":"1187:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18057,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1207:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$18124","typeString":"contract ProtocolFeeBurnerMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$18124","typeString":"contract ProtocolFeeBurnerMock"}],"id":18056,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1199:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18055,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:76","typeDescriptions":{}}},"id":18058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1199:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18059,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18028,"src":"1214:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18050,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18026,"src":"1161:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":18052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1170:16:76","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":9771,"src":"1161:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":18060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1161:75:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18061,"nodeType":"ExpressionStatement","src":"1161:75:76"}]}},{"expression":{"arguments":[{"id":18071,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18035,"src":"1383:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18072,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18028,"src":"1394:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":18067,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18031,"src":"1364:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}],"id":18066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1356:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18065,"name":"address","nodeType":"ElementaryTypeName","src":"1356:7:76","typeDescriptions":{}}},"id":18068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1356:20:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18064,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"1341:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20TestToken_$6677_$","typeString":"type(contract ERC20TestToken)"}},"id":18069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:36:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20TestToken_$6677","typeString":"contract ERC20TestToken"}},"id":18070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1378:4:76","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6610,"src":"1341:41:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":18073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:75:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18074,"nodeType":"ExpressionStatement","src":"1341:75:76"},{"assignments":[18076],"declarations":[{"constant":false,"id":18076,"mutability":"mutable","name":"targetTokenAmount","nameLocation":"1435:17:76","nodeType":"VariableDeclaration","scope":18102,"src":"1427:25:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18075,"name":"uint256","nodeType":"ElementaryTypeName","src":"1427:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18081,"initialValue":{"arguments":[{"id":18079,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18017,"src":"1485:11:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18077,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18028,"src":"1455:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1477:7:76","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4666,"src":"1455:29:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":18080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1427:70:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18082,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18076,"src":"1511:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":18083,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18033,"src":"1531:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:32:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18092,"nodeType":"IfStatement","src":"1507:133:76","trueBody":{"id":18091,"nodeType":"Block","src":"1545:95:76","statements":[{"errorCall":{"arguments":[{"id":18086,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18031,"src":"1584:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":18087,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18076,"src":"1597:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18088,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18033,"src":"1616:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18085,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":694,"src":"1566:17:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$9632_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":18089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1566:63:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18090,"nodeType":"RevertStatement","src":"1559:70:76"}]}},{"eventCall":{"arguments":[{"id":18094,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18023,"src":"1754:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18095,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18026,"src":"1760:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":18096,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18028,"src":"1770:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18097,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18031,"src":"1793:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},{"id":18098,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18076,"src":"1806:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18099,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18035,"src":"1825:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18093,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":684,"src":"1736:17:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_contract$_IERC20_$9632_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":18100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1736:99:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18101,"nodeType":"EmitStatement","src":"1731:104:76"}]},"documentation":{"id":18021,"nodeType":"StructuredDocumentation","src":"759:34:76","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":18103,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"807:4:76","nodeType":"FunctionDefinition","parameters":{"id":18038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18023,"mutability":"mutable","name":"pool","nameLocation":"829:4:76","nodeType":"VariableDeclaration","scope":18103,"src":"821:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18022,"name":"address","nodeType":"ElementaryTypeName","src":"821:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18026,"mutability":"mutable","name":"feeToken","nameLocation":"850:8:76","nodeType":"VariableDeclaration","scope":18103,"src":"843:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":18025,"nodeType":"UserDefinedTypeName","pathNode":{"id":18024,"name":"IERC20","nameLocations":["843:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"843:6:76"},"referencedDeclaration":9632,"src":"843:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18028,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"876:21:76","nodeType":"VariableDeclaration","scope":18103,"src":"868:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18027,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18031,"mutability":"mutable","name":"targetToken","nameLocation":"914:11:76","nodeType":"VariableDeclaration","scope":18103,"src":"907:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":18030,"nodeType":"UserDefinedTypeName","pathNode":{"id":18029,"name":"IERC20","nameLocations":["907:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"907:6:76"},"referencedDeclaration":9632,"src":"907:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18033,"mutability":"mutable","name":"minAmountOut","nameLocation":"943:12:76","nodeType":"VariableDeclaration","scope":18103,"src":"935:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18032,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18035,"mutability":"mutable","name":"recipient","nameLocation":"973:9:76","nodeType":"VariableDeclaration","scope":18103,"src":"965:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18034,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18037,"mutability":"mutable","name":"deadline","nameLocation":"1000:8:76","nodeType":"VariableDeclaration","scope":18103,"src":"992:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18036,"name":"uint256","nodeType":"ElementaryTypeName","src":"992:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"811:203:76"},"returnParameters":{"id":18039,"nodeType":"ParameterList","parameters":[],"src":"1024:0:76"},"scope":18124,"src":"798:1044:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18112,"nodeType":"Block","src":"1895:36:76","statements":[{"expression":{"id":18110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18108,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18017,"src":"1905:11:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18109,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18105,"src":"1919:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1905:19:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18111,"nodeType":"ExpressionStatement","src":"1905:19:76"}]},"functionSelector":"e38e91f9","id":18113,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenRatio","nameLocation":"1857:13:76","nodeType":"FunctionDefinition","parameters":{"id":18106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18105,"mutability":"mutable","name":"ratio","nameLocation":"1879:5:76","nodeType":"VariableDeclaration","scope":18113,"src":"1871:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18104,"name":"uint256","nodeType":"ElementaryTypeName","src":"1871:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1870:15:76"},"returnParameters":{"id":18107,"nodeType":"ParameterList","parameters":[],"src":"1895:0:76"},"scope":18124,"src":"1848:83:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18122,"nodeType":"Block","src":"1992:46:76","statements":[{"expression":{"id":18120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18118,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18020,"src":"2002:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18119,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18115,"src":"2024:7:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2002:29:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18121,"nodeType":"ExpressionStatement","src":"2002:29:76"}]},"functionSelector":"7d341ad6","id":18123,"implemented":true,"kind":"function","modifiers":[],"name":"setTransferFromEnabled","nameLocation":"1946:22:76","nodeType":"FunctionDefinition","parameters":{"id":18116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18115,"mutability":"mutable","name":"enabled","nameLocation":"1974:7:76","nodeType":"VariableDeclaration","scope":18123,"src":"1969:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18114,"name":"bool","nodeType":"ElementaryTypeName","src":"1969:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1968:14:76"},"returnParameters":{"id":18117,"nodeType":"ParameterList","parameters":[],"src":"1992:0:76"},"scope":18124,"src":"1937:101:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18125,"src":"544:1496:76","usedErrors":[694,697,9711,9992,9997,10000],"usedEvents":[684]}],"src":"46:1995:76"},"id":76},"contracts/test/VaultMockForFeeSweeper.sol":{"ast":{"absolutePath":"contracts/test/VaultMockForFeeSweeper.sol","exportedSymbols":{"IAuthorizer":[1009],"IERC20":[9632],"IProtocolFeeController":[1673],"SafeERC20":[9984],"VaultMockForFeeSweeper":[18286]},"id":18287,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18126,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:77"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18128,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18287,"sourceUnit":9633,"src":"72:72:77","symbolAliases":[{"foreign":{"id":18127,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"81:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18130,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18287,"sourceUnit":9985,"src":"145:84:77","symbolAliases":[{"foreign":{"id":18129,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9984,"src":"154:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":18132,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18287,"sourceUnit":1010,"src":"230:91:77","symbolAliases":[{"foreign":{"id":18131,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1009,"src":"239:11:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":18134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18287,"sourceUnit":1674,"src":"322:113:77","symbolAliases":[{"foreign":{"id":18133,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"331:22:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18135,"name":"IAuthorizer","nameLocations":["472:11:77"],"nodeType":"IdentifierPath","referencedDeclaration":1009,"src":"472:11:77"},"id":18136,"nodeType":"InheritanceSpecifier","src":"472:11:77"}],"canonicalName":"VaultMockForFeeSweeper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18286,"linearizedBaseContracts":[18286,1009],"name":"VaultMockForFeeSweeper","nameLocation":"446:22:77","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18140,"libraryName":{"id":18137,"name":"SafeERC20","nameLocations":["496:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":9984,"src":"496:9:77"},"nodeType":"UsingForDirective","src":"490:27:77","typeName":{"id":18139,"nodeType":"UserDefinedTypeName","pathNode":{"id":18138,"name":"IERC20","nameLocations":["510:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"510:6:77"},"referencedDeclaration":9632,"src":"510:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}}},{"constant":false,"functionSelector":"022914a7","id":18144,"mutability":"mutable","name":"owners","nameLocation":"555:6:77","nodeType":"VariableDeclaration","scope":18286,"src":"523:38:77","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":18143,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":18141,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"523:24:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":18142,"name":"bool","nodeType":"ElementaryTypeName","src":"542:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":18154,"nodeType":"Block","src":"582:42:77","statements":[{"expression":{"id":18152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18147,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18144,"src":"592:6:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18150,"indexExpression":{"expression":{"id":18148,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"599:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"603:6:77","memberName":"sender","nodeType":"MemberAccess","src":"599:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"592:18:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":18151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"613:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"592:25:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18153,"nodeType":"ExpressionStatement","src":"592:25:77"}]},"id":18155,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18145,"nodeType":"ParameterList","parameters":[],"src":"579:2:77"},"returnParameters":{"id":18146,"nodeType":"ParameterList","parameters":[],"src":"582:0:77"},"scope":18286,"src":"568:56:77","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":18166,"nodeType":"Block","src":"651:95:77","statements":[{"expression":{"arguments":[{"baseExpression":{"id":18158,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18144,"src":"669:6:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18161,"indexExpression":{"expression":{"id":18159,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"676:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"680:6:77","memberName":"sender","nodeType":"MemberAccess","src":"676:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"669:18:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f776e6572","id":18162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"689:38:77","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""},"value":"VaultMockForFeeSweeper: Not an owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""}],"id":18157,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"661:7:77","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":18163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"661:67:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18164,"nodeType":"ExpressionStatement","src":"661:67:77"},{"id":18165,"nodeType":"PlaceholderStatement","src":"738:1:77"}]},"id":18167,"name":"onlyOwner","nameLocation":"639:9:77","nodeType":"ModifierDefinition","parameters":{"id":18156,"nodeType":"ParameterList","parameters":[],"src":"648:2:77"},"src":"630:116:77","virtual":false,"visibility":"internal"},{"body":{"id":18180,"nodeType":"Block","src":"824:50:77","statements":[{"expression":{"arguments":[{"arguments":[{"id":18176,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"861:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$18286","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$18286","typeString":"contract VaultMockForFeeSweeper"}],"id":18175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"853:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18174,"name":"address","nodeType":"ElementaryTypeName","src":"853:7:77","typeDescriptions":{}}},"id":18177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"853:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18173,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1009,"src":"841:11:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthorizer_$1009_$","typeString":"type(contract IAuthorizer)"}},"id":18178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:26:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"functionReturnParameters":18172,"id":18179,"nodeType":"Return","src":"834:33:77"}]},"functionSelector":"aaabadc5","id":18181,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"761:13:77","nodeType":"FunctionDefinition","parameters":{"id":18168,"nodeType":"ParameterList","parameters":[],"src":"774:2:77"},"returnParameters":{"id":18172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18171,"mutability":"mutable","name":"authorizer","nameLocation":"812:10:77","nodeType":"VariableDeclaration","scope":18181,"src":"800:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"},"typeName":{"id":18170,"nodeType":"UserDefinedTypeName","pathNode":{"id":18169,"name":"IAuthorizer","nameLocations":["800:11:77"],"nodeType":"IdentifierPath","referencedDeclaration":1009,"src":"800:11:77"},"referencedDeclaration":1009,"src":"800:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1009","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"799:24:77"},"scope":18286,"src":"752:122:77","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1008],"body":{"id":18196,"nodeType":"Block","src":"964:39:77","statements":[{"expression":{"baseExpression":{"id":18192,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18144,"src":"981:6:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18194,"indexExpression":{"id":18193,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18185,"src":"988:7:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"981:15:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18191,"id":18195,"nodeType":"Return","src":"974:22:77"}]},"functionSelector":"9be2a884","id":18197,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"889:10:77","nodeType":"FunctionDefinition","parameters":{"id":18188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18197,"src":"900:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18182,"name":"bytes32","nodeType":"ElementaryTypeName","src":"900:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18185,"mutability":"mutable","name":"account","nameLocation":"917:7:77","nodeType":"VariableDeclaration","scope":18197,"src":"909:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18184,"name":"address","nodeType":"ElementaryTypeName","src":"909:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18187,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18197,"src":"926:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18186,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"899:35:77"},"returnParameters":{"id":18191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18197,"src":"958:4:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18189,"name":"bool","nodeType":"ElementaryTypeName","src":"958:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"957:6:77"},"scope":18286,"src":"880:123:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18210,"nodeType":"Block","src":"1084:39:77","statements":[{"expression":{"baseExpression":{"id":18206,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18144,"src":"1101:6:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18208,"indexExpression":{"id":18207,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18201,"src":"1108:7:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1101:15:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18205,"id":18209,"nodeType":"Return","src":"1094:22:77"}]},"functionSelector":"c6a92e16","id":18211,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"1018:10:77","nodeType":"FunctionDefinition","parameters":{"id":18202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18211,"src":"1029:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18198,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1029:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18201,"mutability":"mutable","name":"account","nameLocation":"1046:7:77","nodeType":"VariableDeclaration","scope":18211,"src":"1038:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18200,"name":"address","nodeType":"ElementaryTypeName","src":"1038:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1028:26:77"},"returnParameters":{"id":18205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18204,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18211,"src":"1078:4:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18203,"name":"bool","nodeType":"ElementaryTypeName","src":"1078:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1077:6:77"},"scope":18286,"src":"1009:114:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18224,"nodeType":"Block","src":"1182:38:77","statements":[{"expression":{"id":18222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18218,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18144,"src":"1192:6:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18220,"indexExpression":{"id":18219,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18213,"src":"1199:6:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1192:14:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":18221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1209:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1192:21:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18223,"nodeType":"ExpressionStatement","src":"1192:21:77"}]},"functionSelector":"7065cb48","id":18225,"implemented":true,"kind":"function","modifiers":[{"id":18216,"kind":"modifierInvocation","modifierName":{"id":18215,"name":"onlyOwner","nameLocations":["1172:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":18167,"src":"1172:9:77"},"nodeType":"ModifierInvocation","src":"1172:9:77"}],"name":"addOwner","nameLocation":"1138:8:77","nodeType":"FunctionDefinition","parameters":{"id":18214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18213,"mutability":"mutable","name":"owner_","nameLocation":"1155:6:77","nodeType":"VariableDeclaration","scope":18225,"src":"1147:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18212,"name":"address","nodeType":"ElementaryTypeName","src":"1147:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1146:16:77"},"returnParameters":{"id":18217,"nodeType":"ParameterList","parameters":[],"src":"1182:0:77"},"scope":18286,"src":"1129:91:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18238,"nodeType":"Block","src":"1282:39:77","statements":[{"expression":{"id":18236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18232,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18144,"src":"1292:6:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":18234,"indexExpression":{"id":18233,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18227,"src":"1299:6:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1292:14:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":18235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1309:5:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1292:22:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18237,"nodeType":"ExpressionStatement","src":"1292:22:77"}]},"functionSelector":"173825d9","id":18239,"implemented":true,"kind":"function","modifiers":[{"id":18230,"kind":"modifierInvocation","modifierName":{"id":18229,"name":"onlyOwner","nameLocations":["1272:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":18167,"src":"1272:9:77"},"nodeType":"ModifierInvocation","src":"1272:9:77"}],"name":"removeOwner","nameLocation":"1235:11:77","nodeType":"FunctionDefinition","parameters":{"id":18228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18227,"mutability":"mutable","name":"owner_","nameLocation":"1255:6:77","nodeType":"VariableDeclaration","scope":18239,"src":"1247:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18226,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1246:16:77"},"returnParameters":{"id":18231,"nodeType":"ParameterList","parameters":[],"src":"1282:0:77"},"scope":18286,"src":"1226:95:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18252,"nodeType":"Block","src":"1432:61:77","statements":[{"expression":{"arguments":[{"arguments":[{"id":18248,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1480:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$18286","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$18286","typeString":"contract VaultMockForFeeSweeper"}],"id":18247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1472:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18246,"name":"address","nodeType":"ElementaryTypeName","src":"1472:7:77","typeDescriptions":{}}},"id":18249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1472:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18245,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1673,"src":"1449:22:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1673_$","typeString":"type(contract IProtocolFeeController)"}},"id":18250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1449:37:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":18244,"id":18251,"nodeType":"Return","src":"1442:44:77"}]},"functionSelector":"85f2dbd4","id":18253,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"1336:24:77","nodeType":"FunctionDefinition","parameters":{"id":18240,"nodeType":"ParameterList","parameters":[],"src":"1360:2:77"},"returnParameters":{"id":18244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18243,"mutability":"mutable","name":"protocolFeeController","nameLocation":"1409:21:77","nodeType":"VariableDeclaration","scope":18253,"src":"1386:44:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"},"typeName":{"id":18242,"nodeType":"UserDefinedTypeName","pathNode":{"id":18241,"name":"IProtocolFeeController","nameLocations":["1386:22:77"],"nodeType":"IdentifierPath","referencedDeclaration":1673,"src":"1386:22:77"},"referencedDeclaration":1673,"src":"1386:22:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1673","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1385:46:77"},"scope":18286,"src":"1327:166:77","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18258,"nodeType":"Block","src":"1547:2:77","statements":[]},"functionSelector":"8f4ab9ca","id":18259,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"1508:20:77","nodeType":"FunctionDefinition","parameters":{"id":18256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18259,"src":"1529:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18254,"name":"address","nodeType":"ElementaryTypeName","src":"1529:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1528:9:77"},"returnParameters":{"id":18257,"nodeType":"ParameterList","parameters":[],"src":"1547:0:77"},"scope":18286,"src":"1499:50:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18284,"nodeType":"Block","src":"1654:78:77","statements":[{"expression":{"arguments":[{"id":18274,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1683:9:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":18279,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1718:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$18286","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$18286","typeString":"contract VaultMockForFeeSweeper"}],"id":18278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1710:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18277,"name":"address","nodeType":"ElementaryTypeName","src":"1710:7:77","typeDescriptions":{}}},"id":18280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1710:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18275,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18266,"src":"1694:5:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":18276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1700:9:77","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":9589,"src":"1694:15:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1694:30:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18271,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18266,"src":"1664:5:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"id":18273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1670:12:77","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":9744,"src":"1664:18:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$9632_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$9632_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:61:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18283,"nodeType":"ExpressionStatement","src":"1664:61:77"}]},"functionSelector":"b53a70b2","id":18285,"implemented":true,"kind":"function","modifiers":[{"id":18269,"kind":"modifierInvocation","modifierName":{"id":18268,"name":"onlyOwner","nameLocations":["1644:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":18167,"src":"1644:9:77"},"nodeType":"ModifierInvocation","src":"1644:9:77"}],"name":"withdrawProtocolFeesForToken","nameLocation":"1564:28:77","nodeType":"FunctionDefinition","parameters":{"id":18267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18285,"src":"1593:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18260,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18263,"mutability":"mutable","name":"recipient","nameLocation":"1610:9:77","nodeType":"VariableDeclaration","scope":18285,"src":"1602:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18262,"name":"address","nodeType":"ElementaryTypeName","src":"1602:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18266,"mutability":"mutable","name":"token","nameLocation":"1628:5:77","nodeType":"VariableDeclaration","scope":18285,"src":"1621:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"},"typeName":{"id":18265,"nodeType":"UserDefinedTypeName","pathNode":{"id":18264,"name":"IERC20","nameLocations":["1621:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":9632,"src":"1621:6:77"},"referencedDeclaration":9632,"src":"1621:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$9632","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1592:42:77"},"returnParameters":{"id":18270,"nodeType":"ParameterList","parameters":[],"src":"1654:0:77"},"scope":18286,"src":"1555:177:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18287,"src":"437:1297:77","usedErrors":[9711,9992,9997,10000],"usedEvents":[]}],"src":"46:1689:77"},"id":77},"contracts/test/WeightedLPOracleMock.sol":{"ast":{"absolutePath":"contracts/test/WeightedLPOracleMock.sol","exportedSymbols":{"AggregatorV3Interface":[8718],"IVault":[2319],"IWeightedPool":[66],"WeightedLPOracle":[17660],"WeightedLPOracleMock":[18334]},"id":18335,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18288,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:78"},{"absolutePath":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","file":"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol","id":18290,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18335,"sourceUnit":8719,"src":"72:114:78","symbolAliases":[{"foreign":{"id":18289,"name":"AggregatorV3Interface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"81:21:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18292,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18335,"sourceUnit":2320,"src":"188:81:78","symbolAliases":[{"foreign":{"id":18291,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"197:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","id":18294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18335,"sourceUnit":67,"src":"270:103:78","symbolAliases":[{"foreign":{"id":18293,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"279:13:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/WeightedLPOracle.sol","file":"../WeightedLPOracle.sol","id":18296,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18335,"sourceUnit":17661,"src":"375:59:78","symbolAliases":[{"foreign":{"id":18295,"name":"WeightedLPOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17660,"src":"384:16:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18297,"name":"WeightedLPOracle","nameLocations":["469:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":17660,"src":"469:16:78"},"id":18298,"nodeType":"InheritanceSpecifier","src":"469:16:78"}],"canonicalName":"WeightedLPOracleMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18334,"linearizedBaseContracts":[18334,17660,8718,952],"name":"WeightedLPOracleMock","nameLocation":"445:20:78","nodeType":"ContractDefinition","nodes":[{"body":{"id":18319,"nodeType":"Block","src":"683:64:78","statements":[]},"id":18320,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18313,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18301,"src":"651:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},{"id":18314,"name":"pool_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18304,"src":"659:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},{"id":18315,"name":"feeds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18308,"src":"666:5:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[] memory"}},{"id":18316,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18310,"src":"673:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18317,"kind":"baseConstructorSpecifier","modifierName":{"id":18312,"name":"WeightedLPOracle","nameLocations":["634:16:78"],"nodeType":"IdentifierPath","referencedDeclaration":17660,"src":"634:16:78"},"nodeType":"ModifierInvocation","src":"634:48:78"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18301,"mutability":"mutable","name":"vault_","nameLocation":"520:6:78","nodeType":"VariableDeclaration","scope":18320,"src":"513:13:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"},"typeName":{"id":18300,"nodeType":"UserDefinedTypeName","pathNode":{"id":18299,"name":"IVault","nameLocations":["513:6:78"],"nodeType":"IdentifierPath","referencedDeclaration":2319,"src":"513:6:78"},"referencedDeclaration":2319,"src":"513:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2319","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":18304,"mutability":"mutable","name":"pool_","nameLocation":"550:5:78","nodeType":"VariableDeclaration","scope":18320,"src":"536:19:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"},"typeName":{"id":18303,"nodeType":"UserDefinedTypeName","pathNode":{"id":18302,"name":"IWeightedPool","nameLocations":["536:13:78"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"536:13:78"},"referencedDeclaration":66,"src":"536:13:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWeightedPool_$66","typeString":"contract IWeightedPool"}},"visibility":"internal"},{"constant":false,"id":18308,"mutability":"mutable","name":"feeds","nameLocation":"596:5:78","nodeType":"VariableDeclaration","scope":18320,"src":"565:36:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_memory_ptr","typeString":"contract AggregatorV3Interface[]"},"typeName":{"baseType":{"id":18306,"nodeType":"UserDefinedTypeName","pathNode":{"id":18305,"name":"AggregatorV3Interface","nameLocations":["565:21:78"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"565:21:78"},"referencedDeclaration":8718,"src":"565:21:78","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"id":18307,"nodeType":"ArrayTypeName","src":"565:23:78","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_AggregatorV3Interface_$8718_$dyn_storage_ptr","typeString":"contract AggregatorV3Interface[]"}},"visibility":"internal"},{"constant":false,"id":18310,"mutability":"mutable","name":"version_","nameLocation":"619:8:78","nodeType":"VariableDeclaration","scope":18320,"src":"611:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18309,"name":"uint256","nodeType":"ElementaryTypeName","src":"611:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"503:130:78"},"returnParameters":{"id":18318,"nodeType":"ParameterList","parameters":[],"src":"683:0:78"},"scope":18334,"src":"492:255:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":18332,"nodeType":"Block","src":"859:67:78","statements":[{"expression":{"arguments":[{"id":18329,"name":"feed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18323,"src":"914:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}],"id":18328,"name":"_computeFeedTokenDecimalScalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"876:37:78","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_AggregatorV3Interface_$8718_$returns$_t_uint256_$","typeString":"function (contract AggregatorV3Interface) view returns (uint256)"}},"id":18330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"876:43:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18327,"id":18331,"nodeType":"Return","src":"869:50:78"}]},"functionSelector":"b9106c8f","id":18333,"implemented":true,"kind":"function","modifiers":[],"name":"calculateFeedTokenDecimalScalingFactor","nameLocation":"762:38:78","nodeType":"FunctionDefinition","parameters":{"id":18324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18323,"mutability":"mutable","name":"feed","nameLocation":"823:4:78","nodeType":"VariableDeclaration","scope":18333,"src":"801:26:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"},"typeName":{"id":18322,"nodeType":"UserDefinedTypeName","pathNode":{"id":18321,"name":"AggregatorV3Interface","nameLocations":["801:21:78"],"nodeType":"IdentifierPath","referencedDeclaration":8718,"src":"801:21:78"},"referencedDeclaration":8718,"src":"801:21:78","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorV3Interface_$8718","typeString":"contract AggregatorV3Interface"}},"visibility":"internal"}],"src":"800:28:78"},"returnParameters":{"id":18327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18333,"src":"850:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18325,"name":"uint256","nodeType":"ElementaryTypeName","src":"850:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"849:9:78"},"scope":18334,"src":"753:173:78","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":18335,"src":"436:492:78","usedErrors":[4200,4630,4927,4930,4933,4936,10286,10298,16605],"usedEvents":[]}],"src":"46:883:78"},"id":78}},"contracts":{"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol":{"IWeightedPool":{"abi":[{"inputs":[],"name":"MinWeight","type":"error"},{"inputs":[],"name":"NormalizedWeightInvariant","type":"error"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNormalizedWeights","outputs":[{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct WeightedPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"internalType":"struct WeightedPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getNormalizedWeights()":"f89f27ed","getWeightedPoolDynamicData()":"c0bc6f33","getWeightedPoolImmutableData()":"53b79bd7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MinWeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NormalizedWeightInvariant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNormalizedWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct WeightedPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"internalType\":\"struct WeightedPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"getNormalizedWeights()\":{\"returns\":{\"normalizedWeights\":\"The normalized weights, sorted in token registration order\"}},\"getWeightedPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic weighted pool parameters\"}},\"getWeightedPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable weighted pool parameters\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"MinWeight()\":[{\"notice\":\"Indicates that one of the pool tokens' weight is below the minimum allowed.\"}],\"NormalizedWeightInvariant()\":[{\"notice\":\"Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\"}]},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getNormalizedWeights()\":{\"notice\":\"Get the normalized weights.\"},\"getWeightedPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getWeightedPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Full Weighted pool interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":\"IWeightedPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"IVersion":{"abi":[{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"For standard Balancer contracts, returns a JSON representation of the contract version containing name, version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\",\"returns\":{\"_0\":\"version The version string corresponding to the current deployed contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Return arbitrary text representing the version of a contract.\"}},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"IComposableCow":{"abi":[{"inputs":[{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"},{"internalType":"bool","name":"dispatch","type":"bool"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"_domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"typeHash","type":"bytes32"},{"internalType":"bytes","name":"encodeData","type":"bytes"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"isValidSafeSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create((address,bytes32,bytes),bool)":"6bfae1ca","domainSeparator()":"f698da25","isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)":"53f00b14"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"dispatch\",\"type\":\"bool\"}],\"name\":\"create\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"typeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"encodeData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"isValidSafeSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"params\":{\"dispatch\":\"If true, submit the order (always true in the CowSwapBurner)\",\"params\":\"Order parameters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"notice\":\"Construct a CoW order.\"},\"isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)\":{\"notice\":\"Delegated ERC-1271 signature validation with an enhanced context.\"}},\"notice\":\"Utility contract used to validate orders in the `CowSwapFeeBurner`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":\"IComposableCow\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ICowConditionalOrder":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"CoW Protocol Developers + mfw78 \",\"errors\":{\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"kind\":\"dev\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}]},\"kind\":\"user\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"notice\":\"Conditional Order Interface - verify a Cow order.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":\"ICowConditionalOrder\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ICowConditionalOrderGenerator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"mfw78 \",\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}}},\"kind\":\"dev\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"}},\"notice\":\"Conditional Order Generator Interface\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":\"ICowConditionalOrderGenerator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ICowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"orderData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"orderStatus","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"orderData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"orderStatus\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderData\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderStatus\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with _data\"}},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":\"ICowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743\",\"dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"IPoolHelperCommon":{"abi":[{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolRemovedFromSet","type":"event"},{"inputs":[{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"hasPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPools(address[])":"b36a4ab1","getPoolCount()":"8eec5d70","getPools(uint256,uint256)":"bbe95837","hasPool(address)":"1246dbf5","removePools(address[])":"4b164140"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"hasPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PoolAlreadyInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being removed\"}}]},\"events\":{\"PoolAddedToSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was added\"}},\"PoolRemovedFromSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was removed\"}}},\"kind\":\"dev\",\"methods\":{\"addPools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add pools to the set.\",\"params\":{\"newPools\":\"List of pools to add\"}},\"getPoolCount()\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction.\",\"returns\":{\"_0\":\"poolCount The current number of pools in the set\"}},\"getPools(uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\",\"params\":{\"from\":\"Start index\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"hasPool(address)\":{\"params\":{\"pool\":\"Pool to check\"},\"returns\":{\"_0\":\"isPausable True if the pool is in the set, false otherwise\"}},\"removePools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove pools from the set.\",\"params\":{\"pools\":\"List of pools to remove\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"PoolAlreadyInSet(address)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"notice\":\"Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\"},\"PoolRemovedFromSet(address)\":{\"notice\":\"Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\"}},\"kind\":\"user\",\"methods\":{\"addPools(address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"getPoolCount()\":{\"notice\":\"Get the number of pools.\"},\"getPools(uint256,uint256)\":{\"notice\":\"Get a range of pools.\"},\"hasPool(address)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"removePools(address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"}},\"notice\":\"Common interface for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":\"IPoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xc69ed5b725cd2b877ac74ee7288639d86297ca434418753833758611898d2018\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37b1b0fb636a1e35cf45a709cf87883b95abf66daf1b374456ceb2bc3f5fea08\",\"dweb:/ipfs/QmbcNhkXd5urdbC7SpD2CKVNuWYMHmca3oiTUPWhqoudZe\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"IPoolPauseHelper":{"abi":[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"pausePools(address[])":"a20dc529"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant pause permission to accounts here, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not addressed here, and must still be done through the Vault.\",\"kind\":\"dev\",\"methods\":{\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"}},\"notice\":\"Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":\"IPoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"IPoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setStaticSwapFeePercentage(address,uint256)":"d15126ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this contract, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that allow governance to set fees can be added (i.e., they must not have swap managers).\",\"errors\":{\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}]},\"kind\":\"dev\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}]},\"kind\":\"user\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"}},\"notice\":\"Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":\"IPoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"IProtocolFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":\"IProtocolFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"IProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield- setting functions here, which allows greater granularity than setting permissions directly on the fee controller. Note that governance must grant this contract permission to call the pool protocol fee setting functions on the controller.\",\"kind\":\"dev\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"}},\"notice\":\"Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":\"IProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"IProtocolFeeSweeper":{"abi":[{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":\"IProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol":{"IWeightedLPOracle":{"abi":[{"inputs":[{"internalType":"int256[]","name":"prices","type":"int256[]"}],"name":"calculateTVL","outputs":[{"internalType":"uint256","name":"tvl","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedData","outputs":[{"internalType":"int256[]","name":"prices","type":"int256[]"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedTokenDecimalScalingFactors","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeds","outputs":[{"internalType":"contract AggregatorV3Interface[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"calculateTVL(int256[])":"47bcac3b","getFeedData()":"af1296d3","getFeedTokenDecimalScalingFactors()":"cd2c9e70","getFeeds()":"7fe955d4","getWeights()":"22acb867"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"prices\",\"type\":\"int256[]\"}],\"name\":\"calculateTVL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tvl\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedData\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"prices\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedTokenDecimalScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeds\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"calculateTVL(int256[])\":{\"details\":\"Prices are defined the same way as in the oracle feed, and scaled to 18-decimal FP values.\",\"params\":{\"prices\":\"An array of prices for the tokens in the pool\"},\"returns\":{\"tvl\":\"TVL calculated from the prices and current weights\"}},\"getFeedData()\":{\"returns\":{\"prices\":\"An array of latest prices from the feeds\",\"updatedAt\":\"The timestamp of the last update\"}},\"getFeedTokenDecimalScalingFactors()\":{\"returns\":{\"_0\":\"An array of scaling factors corresponding to each feed.\"}},\"getFeeds()\":{\"returns\":{\"_0\":\"An array of AggregatorV3Interface instances representing the feeds.\"}},\"getWeights()\":{\"returns\":{\"_0\":\"An array of weights corresponding to each token in the pool.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateTVL(int256[])\":{\"notice\":\"Calculates the tvl based on the provided prices.\"},\"getFeedData()\":{\"notice\":\"Gets the latest feed data.\"},\"getFeedTokenDecimalScalingFactors()\":{\"notice\":\"Gets the decimal scaling factors for each feed token.\"},\"getFeeds()\":{\"notice\":\"Gets the list of feeds used by the oracle.\"},\"getWeights()\":{\"notice\":\"Gets the current weights of the tokens in the pool.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\":\"IWeightedLPOracle\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\":{\"keccak256\":\"0xab6ca6305d0ca426f5b456925e487a9e0bbd41b77d9bf3a4321296459a1b586f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7bf6bb63d1fdf1d2ba6cf6835b36f201aaf36092f80185774d123494ee3c9fdf\",\"dweb:/ipfs/QmeN9rfPZtGQrFo5mDG144Vz48GWGDQCqXeQ8WaKTDXCMk\"]},\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol":{"IWeightedLPOracleFactory":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IWeightedPool","name":"pool","type":"address"},{"indexed":false,"internalType":"contract IWeightedLPOracle","name":"oracle","type":"address"},{"indexed":false,"internalType":"uint256","name":"oracleVersion","type":"uint256"}],"name":"WeightedLPOracleCreated","type":"event"},{"inputs":[{"internalType":"contract IWeightedPool","name":"pool","type":"address"},{"internalType":"contract AggregatorV3Interface[]","name":"feeds","type":"address[]"}],"name":"create","outputs":[{"internalType":"contract IWeightedLPOracle","name":"oracle","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IWeightedPool","name":"pool","type":"address"}],"name":"getOracle","outputs":[{"internalType":"contract IWeightedLPOracle","name":"oracle","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create(address,address[])":"cd1d9776","getOracle(address)":"10d3d22e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IWeightedPool\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IWeightedLPOracle\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"}],\"name\":\"WeightedLPOracleCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IWeightedPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"feeds\",\"type\":\"address[]\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IWeightedLPOracle\",\"name\":\"oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWeightedPool\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"contract IWeightedLPOracle\",\"name\":\"oracle\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol\":\"IWeightedLPOracleFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\":{\"keccak256\":\"0xab6ca6305d0ca426f5b456925e487a9e0bbd41b77d9bf3a4321296459a1b586f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7bf6bb63d1fdf1d2ba6cf6835b36f201aaf36092f80185774d123494ee3c9fdf\",\"dweb:/ipfs/QmeN9rfPZtGQrFo5mDG144Vz48GWGDQCqXeQ8WaKTDXCMk\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol\":{\"keccak256\":\"0x0266f954e9d3a8931ebdfaffd837d6faa163bff4c8650a0e6963107fc8cab631\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e172244a9256668601473aad4eab397e8c1a54bb895c7cb101f8427ed05a0fd2\",\"dweb:/ipfs/QmNfBz4D61ta6G3zxVJZEz4yBwzzE7WgeAD9Gc6FTQrzSj\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"IBasePool":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool types should implement this interface. Note that it also requires implementation of: - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages. - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced liquidity operation.\",\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Base interface for a Balancer Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":\"IBasePool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"IBasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deploymentAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deploymentAddress\":\"The predicted address of the pool, given the salt\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"poolCount\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"pools\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"isDisabled()\":{\"returns\":{\"success\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"success\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"IProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"balancerContractRegistry","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"balancerContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getBalancerContractRegistry()\":{\"returns\":{\"balancerContractRegistry\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"The address of the fee controller\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":\"IProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"IRouter":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"}},\"notice\":\"User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":\"IRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x39a5cd3ee5c0bab644f068ad8ba617a0cf71a91610693b1c93c9536464151ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6a5f61af5cda44d8ef95e610c0b418f2cfb984e9c47a58fb1fa8c8bc949def75\",\"dweb:/ipfs/Qmby1D2D5Ym44jgBTTM8eTGnmNGCCKrb8ujpkhVPE6C6Cr\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ISwapFeePercentageBounds":{"abi":[{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumSwapFeePercentage()":"654cf15d","getMinimumSwapFeePercentage()":"ce20ece7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their specific pool type. A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level, a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as LVR/MEV strategies, where a very high fee makes sense. Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is the highest value below 100% that satisfies the precision requirements.\",\"kind\":\"dev\",\"methods\":{\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum swap fee percentages for a pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":\"ISwapFeePercentageBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"IUnbalancedLiquidityInvariantRatioBounds":{"abi":[{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumInvariantRatio()":"273c1adf","getMinimumInvariantRatio()":"b677fa56"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce any \\\"baseline\\\" bounds on invariant ratios, since such bounds are highly specific and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools. `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their pool type's math. For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\",\"kind\":\"dev\",\"methods\":{\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":\"IUnbalancedLiquidityInvariantRatioBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:34:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:34:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:35:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:35:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"RevertCodec":{"abi":[{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:36:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:36:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":\"RevertCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"Version":{"abi":[{"inputs":[{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346101cb5761041880380380610019816101cf565b928339810190602080828403126101cb5781516001600160401b03928382116101cb570192601f908082860112156101cb5784518481116101b757601f1995610067828501881686016101cf565b928284528583830101116101cb57815f92868093018386015e8301015280519384116101b7575f54926001938481811c911680156101ad575b8282101461019957838111610156575b50809285116001146100f65750839450908392915f946100eb575b50501b915f199060031b1c1916175f555b60405161022390816101f58239f35b015192505f806100cb565b9294849081165f8052845f20945f905b8883831061013c5750505010610124575b505050811b015f556100dc565b01515f1960f88460031b161c191690555f8080610117565b858701518855909601959485019487935090810190610106565b5f8052815f208480880160051c820192848910610190575b0160051c019085905b8281106101855750506100b0565b5f8155018590610177565b9250819261016e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100a0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b75760405256fe6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1CB JUMPI PUSH2 0x418 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP3 DUP5 SUB SLT PUSH2 0x1CB JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x1CB JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP1 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x1CB JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x1B7 JUMPI PUSH1 0x1F NOT SWAP6 PUSH2 0x67 DUP3 DUP6 ADD DUP9 AND DUP7 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE DUP6 DUP4 DUP4 ADD ADD GT PUSH2 0x1CB JUMPI DUP2 PUSH0 SWAP3 DUP7 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x1B7 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1AD JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x199 JUMPI DUP4 DUP2 GT PUSH2 0x156 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0xF6 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0xEB JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x223 SWAP1 DUP2 PUSH2 0x1F5 DUP3 CODECOPY RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xCB JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x13C JUMPI POP POP POP LT PUSH2 0x124 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0xDC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x117 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x190 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x185 JUMPI POP POP PUSH2 0xB0 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x16E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x1B7 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:37:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:37;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;-1:-1:-1;666:520:37;;;-1:-1:-1;666:520:37;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;-1:-1:-1;666:520:37;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;-1:-1:-1;666:520:37;;-1:-1:-1;666:520:37;;;;;;;;;-1:-1:-1;;666:520:37;;;-1:-1:-1;;;;;666:520:37;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings are not yet supported. Contracts like factories and pools should have versions. These typically take the form of JSON strings containing detailed information about the deployment. For instance: `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Retrieves a contract's version from storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":\"Version\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:38:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:38:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:39:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:39:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:41:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:41:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ERC20TestToken":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ZeroTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":795,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":758,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60a0604052346102f257610d7d80380380610019816102f6565b92833981016060828203126102f25781516001600160401b03908181116102f2578261004691850161031b565b90602092838501518281116102f25760409161006391870161031b565b9401519360ff851685036102f2578251828111610209576003918254916001958684811c941680156102e8575b888510146102d4578190601f94858111610286575b508890858311600114610228575f9261021d575b50505f1982861b1c191690861b1783555b80519384116102095760049586548681811c911680156101ff575b828210146101ec578381116101a9575b508092851160011461014457509383949184925f95610139575b50501b925f19911b1c19161790555b608052604051610a10908161036d8239608051816104ff0152f35b015193505f8061010f565b92919084601f198116885f52855f20955f905b8983831061018f5750505010610176575b50505050811b01905561011e565b01519060f8845f19921b161c191690555f808080610168565b858701518955909701969485019488935090810190610157565b875f52815f208480880160051c8201928489106101e3575b0160051c019087905b8281106101d85750506100f5565b5f81550187906101ca565b925081926101c1565b602288634e487b7160e01b5f525260245ffd5b90607f16906100e5565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b9565b90889350601f19831691875f528a5f20925f5b8c8282106102705750508411610259575b505050811b0183556100ca565b01515f1983881b60f8161c191690555f808061024c565b8385015186558c9790950194938401930161023b565b909150855f52885f208580850160051c8201928b86106102cb575b918a91869594930160051c01915b8281106102bd5750506100a5565b5f81558594508a91016102af565b925081926102a1565b634e487b7160e01b5f52602260045260245ffd5b93607f1693610090565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020957604052565b81601f820112156102f2578051906001600160401b0382116102095761034a601f8301601f19166020016102f6565b92828452602083830101116102f257815f9260208093018386015e830101529056fe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea26469706673582212203149a51d4ac94fa7d0fcc677aca8cb21ae765deaf205d8b1ed48dee89e3a3a3c64736f6c634300081b0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x2F2 JUMPI PUSH2 0xD7D DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x60 DUP3 DUP3 SUB SLT PUSH2 0x2F2 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x2F2 JUMPI DUP3 PUSH2 0x46 SWAP2 DUP6 ADD PUSH2 0x31B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP6 ADD MLOAD DUP3 DUP2 GT PUSH2 0x2F2 JUMPI PUSH1 0x40 SWAP2 PUSH2 0x63 SWAP2 DUP8 ADD PUSH2 0x31B JUMP JUMPDEST SWAP5 ADD MLOAD SWAP4 PUSH1 0xFF DUP6 AND DUP6 SUB PUSH2 0x2F2 JUMPI DUP3 MLOAD DUP3 DUP2 GT PUSH2 0x209 JUMPI PUSH1 0x3 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x1 SWAP6 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x2E8 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x2D4 JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x286 JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x228 JUMPI PUSH0 SWAP3 PUSH2 0x21D JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x209 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1FF JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1EC JUMPI DUP4 DUP2 GT PUSH2 0x1A9 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x144 JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x139 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA10 SWAP1 DUP2 PUSH2 0x36D DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4FF ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x10F JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x18F JUMPI POP POP POP LT PUSH2 0x176 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x11E JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x168 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x157 JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1E3 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1D8 JUMPI POP POP PUSH2 0xF5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x1CA JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C1 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xE5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB9 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x270 JUMPI POP POP DUP5 GT PUSH2 0x259 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0xCA JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x24C JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x23B JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x2CB JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x2BD JUMPI POP POP PUSH2 0xA5 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2A1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x90 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x209 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F2 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x209 JUMPI PUSH2 0x34A PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2F2 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 SUB PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE BLOBHASH 0xA5 SAR BLOBBASEFEE 0xC9 0x4F 0xA7 0xD0 0xFC 0xC6 PUSH24 0xACA8CB21AE765DEAF205D8B1ED48DEE89E3A3A3C64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"144:1033:42:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1962:13:51;144:1033:42;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;-1:-1:-1;144:1033:42;;;;-1:-1:-1;;;;144:1033:42;;;;;;;;;;;;;;;;;;;;1985:17:51;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;;;;413:21;;144:1033;;;;;;;;413:21;144:1033;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;-1:-1:-1;144:1033:42;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;-1:-1:-1;144:1033:42;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;-1:-1:-1;144:1033:42;;1985:17:51;144:1033:42;;-1:-1:-1;144:1033:42;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;-1:-1:-1;144:1033:42;;-1:-1:-1;144:1033:42;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;-1:-1:-1;144:1033:42;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;-1:-1:-1;;144:1033:42;;;-1:-1:-1;;;;;144:1033:42;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:42;;;;;;;;-1:-1:-1;;144:1033:42;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2219,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3923":{"entryPoint":2184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_string":{"entryPoint":2142,"id":null,"parameterSlots":2,"returnSlots":1},"fun_transfer":{"entryPoint":2254,"id":9284,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"6567":[{"length":32,"start":1279}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea26469706673582212203149a51d4ac94fa7d0fcc677aca8cb21ae765deaf205d8b1ed48dee89e3a3a3c64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 SUB PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE BLOBHASH 0xA5 SAR BLOBBASEFEE 0xC9 0x4F 0xA7 0xD0 0xFC 0xC6 PUSH24 0xACA8CB21AE765DEAF205D8B1ED48DEE89E3A3A3C64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"144:1033:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;3952:11:51;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;:::i;:::-;;;837:10;;;833:62;;735:10:57;144:1033:42;735:10:57;3754:5:51;735:10:57;;3754:5:51;:::i;:::-;144:1033:42;;;;;833:62;870:14;144:1033;870:14;144:1033;870:14;144:1033;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;:::i;:::-;;;;;;;8317:21:51;;;8313:89;;144:1033:42;;;;;;;;;;6603:19:51;;;;6599:115;;144:1033:42;;7346:25:51;144:1033:42;;;;;;;;;;;;;;;;;7073:21:51;144:1033:42;;7073:21:51;144:1033:42;;;;;7346:25:51;144:1033:42;6599:115:51;6649:50;;;;;144:1033:42;6649:50:51;144:1033:42;;;;;;;6649:50:51;8313:89;144:1033:42;8361:30:51;;;;144:1033:42;;;8361:30:51;144:1033:42;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:42;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;-1:-1:-1;144:1033:42;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;:::i;:::-;;;;;;;7791:21:51;;;7787:91;;6496:21;144:1033:42;;;;;;;;;;;;;7346:25:51;144:1033:42;;;6496:21:51;144:1033:42;;;;;;;;;;;;;;;;;;;;7346:25:51;144:1033:42;;;;;;;;;;;7787:91:51;144:1033:42;7835:32:51;;;;144:1033:42;;;7835:32:51;144:1033:42;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;521:9;144:1033;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;:::i;:::-;;;:::i;:::-;;;;1058:10;;;1054:62;;144:1033;;;;;;;;;;;;735:10:57;144:1033:42;;;;;;;;10828:37:51;10848:17;10828:37;;10824:310;;144:1033:42;;5249:5:51;;;;;;:::i;10824:310::-;10885:24;;;10881:130;;10061:19;;10057:89;;735:10:57;10159:21:51;10155:90;;144:1033:42;;;5249:5:51;144:1033:42;;;;;;;;;;;;;735:10:57;144:1033:42;;;;;;;;;10824:310:51;;;;;;10155:90;144:1033:42;10203:31:51;;;;144:1033:42;;;10203:31:51;10057:89;144:1033:42;10103:32:51;;;;144:1033:42;;;10103:32:51;10881:130;10936:60;;;;144:1033:42;10936:60:51;735:10:57;144:1033:42;;;;;;;;10936:60:51;144:1033:42;;;;;;-1:-1:-1;;144:1033:42;;;;;;;3222:12:51;144:1033:42;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;:::i;:::-;;;735:10:57;;10061:19:51;10057:89;;144:1033:42;;10159:21:51;;;10155:90;;144:1033:42;735:10:57;;;144:1033:42;;9105:4:51;144:1033:42;;;;;;;;;;;;;;;;;;;;10333:31:51;735:10:57;;10333:31:51;;144:1033:42;9105:4:51;144:1033:42;;;10155:90:51;144:1033:42;10203:31:51;;;;144:1033:42;;;10203:31:51;10057:89;144:1033:42;10103:32:51;;;;144:1033:42;;;10103:32:51;144:1033:42;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;2151:5:51;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:42;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2151:5:51;144:1033:42;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:42;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;5656:300:51:-;144:1033:42;;;;5739:18:51;;;5735:86;;144:1033:42;5834:16:51;;;5830:86;;144:1033:42;6356:540:51;144:1033:42;6356:540:51;144:1033:42;;;6356:540:51;144:1033:42;;6603:19:51;;;6599:115;;144:1033:42;7346:25:51;144:1033:42;;;;6356:540:51;144:1033:42;6356:540:51;144:1033:42;;;;6356:540:51;144:1033:42;;;6356:540:51;144:1033:42;;6356:540:51;144:1033:42;;;;;;;;;;;;7346:25:51;5656:300::o;6599:115::-;6649:50;;6356:540;6649:50;;144:1033:42;;;;;;6356:540:51;6649:50;5830:86;5873:32;5755:1;5873:32;5755:1;5873:32;144:1033:42;;5755:1:51;5873:32;5735:86;5780:30;5755:1;5780:30;5755:1;5780:30;144:1033:42;;5755:1:51;5780:30"},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ZeroTransfer()\":[{\"details\":\"Simulate tokens that don't allow zero transfers.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":\"ERC20TestToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"uint256","name":"initialGlobalSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialGlobalYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_ensureValidPrecision":{"entryPoint":488,"id":8563,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e0346101d057601f612f8738819003918201601f19168301916001600160401b038311848410176101d4578084926060946040528339810103126101d05780516001600160a01b03811691908281036101d057604060208301519201519230608052156101c1578060a05260c0526706f05b59d3b20000908181116101b2576020816100ac7fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936101e8565b805f55604051908152a181116101a3576020816100e97f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936101e8565b80600155604051908152a1604051612d5b908161022c823960805181612172015260a051818181610ed6015281816110fc015261283b015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612350015281816126060152818161278201526129860152f35b6353c24f4760e11b5f5260045ffd5b637e6eb7fb60e01b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b64174876e800808204818102918183041490151715610217570361020857565b63419fd9e760e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127d6565b6706f05b59d3b200008211610327576101c482612a5b565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612947565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612947565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127d6565b610b9081612947565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127d6565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127d6565b6706f05b59d3b200008211610e6857610d2482612a5b565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127d6565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a5b565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612947565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b9061107982612947565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127d6565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a5b565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb82612947565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6128027fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f92612925575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128ef575b5050156128c757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161291e575b61290681836120dc565b81010312610323576129179061211d565b5f806128be565b503d6128fc565b606491925061294090843d8611610f3c57610f2d81836120dc565b919061286d565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f936129bd575b5050815190565b909192503d805f833e6129d081836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a08816121ac565b94612a1660405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a43575050505050905f806129b6565b81518381168103610323578152908401908401612a2f565b64174876e8008082048181029181830414901517156106e35703612a7b57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220d7719a3e89010c13d9faeeee16cef4d1899fbc2a81f43503063f962e2edcbe2764736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x1D0 JUMPI PUSH1 0x1F PUSH2 0x2F87 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1D4 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1D0 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 SWAP1 DUP3 DUP2 SUB PUSH2 0x1D0 JUMPI PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x1C1 JUMPI DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH8 0x6F05B59D3B20000 SWAP1 DUP2 DUP2 GT PUSH2 0x1B2 JUMPI PUSH1 0x20 DUP2 PUSH2 0xAC PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 DUP2 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 PUSH2 0xE9 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 PUSH1 0x40 MLOAD PUSH2 0x2D5B SWAP1 DUP2 PUSH2 0x22C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x283B ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2350 ADD MSTORE DUP2 DUP2 PUSH2 0x2606 ADD MSTORE DUP2 DUP2 PUSH2 0x2782 ADD MSTORE PUSH2 0x2986 ADD MSTORE RETURN JUMPDEST PUSH4 0x53C24F47 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x7E6EB7FB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x217 JUMPI SUB PUSH2 0x208 JUMPI JUMP JUMPDEST PUSH4 0x419FD9E7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2947 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2947 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2947 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27D6 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x2802 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x2925 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28EF JUMPI JUMPDEST POP POP ISZERO PUSH2 0x28C7 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x291E JUMPI JUMPDEST PUSH2 0x2906 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2917 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x28BE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28FC JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2940 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x286D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x29BD JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x29D0 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A08 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A16 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A43 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29B6 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A2F JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A7B JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 PUSH18 0x9A3E89010C13D9FAEEEE16CEF4D1899FBC2A DUP2 DELEGATECALL CALLDATALOAD SUB MOD EXTCODEHASH SWAP7 0x2E 0x2E 0xDC 0xBE 0x27 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:44:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;-1:-1:-1;;;;;3120:30799:44;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:44;;;;;;;;;;;;;;;;;922:4:45;;1347:46:33;;943:28:43;939:79;;1028:14;;;409::46;;4720:5:44;7248:55;;;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;-1:-1:-1;3120:30799:44;;;;;;25803:68;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;;1347:46:33;3120:30799:44;;;;;1028:14:43;3120:30799:44;;;;;;;;;;;;;;;409:14:46;3120:30799:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:130;7661:35;;;-1:-1:-1;7661:35:44;;-1:-1:-1;7661:35:44;7244:127;7326:34;;;-1:-1:-1;7326:34:44;;-1:-1:-1;7326:34:44;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;3120:30799:44;-1:-1:-1;3120:30799:44;;;;;;-1:-1:-1;3120:30799:44;;;;;-1:-1:-1;3120:30799:44;33168:749;19669:4:32;;;;;;;;;;;;;;;;;;33769:74:44;33765:146;;33168:749::o;33765:146::-;33866:34;;;-1:-1:-1;33866:34:44;;-1:-1:-1;33866:34:44;19669:4:32;3120:30799:44;;;-1:-1:-1;19669:4:32;;;;;-1:-1:-1;19669:4:32"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18784":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9651,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9230,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9199,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8788,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9396,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9438,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18915":{"entryPoint":9409,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18767":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18900":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_43287":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10198,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8846,"id":7102,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9457,"id":7749,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9522,"id":7785,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10104,"id":8671,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10843,"id":8563,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11061,"id":7719,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18901":{"entryPoint":11111,"id":7719,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9671,"id":7828,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10567,"id":7809,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11161,"id":9744,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9327,"id":10970,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11417,"id":10196,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9921,"id":8466,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10915,"id":8362,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":8562}],"6692":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10299}],"8633":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":9040},{"length":32,"start":9734},{"length":32,"start":10114},{"length":32,"start":10630}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127d6565b6706f05b59d3b200008211610327576101c482612a5b565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612947565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612947565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127d6565b610b9081612947565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127d6565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127d6565b6706f05b59d3b200008211610e6857610d2482612a5b565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127d6565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a5b565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612947565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b9061107982612947565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127d6565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a5b565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb82612947565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6128027fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f92612925575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128ef575b5050156128c757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161291e575b61290681836120dc565b81010312610323576129179061211d565b5f806128be565b503d6128fc565b606491925061294090843d8611610f3c57610f2d81836120dc565b919061286d565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f936129bd575b5050815190565b909192503d805f833e6129d081836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a08816121ac565b94612a1660405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a43575050505050905f806129b6565b81518381168103610323578152908401908401612a2f565b64174876e8008082048181029181830414901517156106e35703612a7b57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220d7719a3e89010c13d9faeeee16cef4d1899fbc2a81f43503063f962e2edcbe2764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2947 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2947 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2947 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27D6 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x2802 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x2925 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28EF JUMPI JUMPDEST POP POP ISZERO PUSH2 0x28C7 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x291E JUMPI JUMPDEST PUSH2 0x2906 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2917 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x28BE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28FC JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2940 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x286D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x29BD JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x29D0 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A08 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A16 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A43 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29B6 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A2F JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A7B JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 PUSH18 0x9A3E89010C13D9FAEEEE16CEF4D1899FBC2A DUP2 DELEGATECALL CALLDATALOAD SUB MOD EXTCODEHASH SWAP7 0x2E 0x2E 0xDC 0xBE 0x27 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;3120:30799:44;1424:26:45;;;3120:30799:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;1525:73:33;;;:::i;:::-;4720:5:44;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31750:39;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;31707:129;;;3120:30799;26774:4;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;;;;;31667:31;31707:129;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:44;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;-1:-1:-1;;31931:101:44;;;;;;;32048:68;31931:101;31707:129;31931:101;;;3120:30799;;;;;;;32048:68;3120:30799;31931:101;;;;:::i;:::-;3120:30799;31931:101;;;3120:30799;;;;;;;;;31931:101;3120:30799;;;7244:127;7326:34;3120:30799;7326:34;3120:30799;;7326:34;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;-1:-1:-1;;;;;8671:6:44;3120:30799;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;436:67:46;;:::i;:::-;3120:30799:44;;;9345:33;;-1:-1:-1;;;;;3120:30799:44;;;9345:33;;3120:30799;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:44;3120:30799;9345:33;;;;;;;3120:30799;;;9345:33;;;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;;;;;;;;;;;11336:30;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;;:57;;;;3120:30799;11566:199;;;3120:30799;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;11091:20;;-1:-1:-1;;;;;3120:30799:44;;;;11192:32;3120:30799;;;;;;;;11290:134;3120:30799;;11387:31;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;:57;;;;11863:1939;11566:199;;;11863:1939;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;3120:30799;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;11973:13;-1:-1:-1;;;;;11973:13:44;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:44;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;9345:6;;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:44;3120:30799;12005:50;;;;;;;;;;;11917:1875;3120:30799;;;12230:240;3120:30799;12437:13;;;;;;:::i;:::-;3120:30799;;;;;;12398:53;3120:30799;-1:-1:-1;;;;;3120:30799:44;;12398:53;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:38;;2000:58;;2153:5;;;:::i;:::-;3120:30799:44;465:4:38;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:44;-1:-1:-1;;;;;3120:30799:44;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:44;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;3120:30799;;;;;;;;;;2000:58:38;2033:14;3120:30799:44;2033:14:38;3120:30799:44;;2033:14:38;12488:1290:44;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;3120:30799::-;;;;;;;;;;12005:50;;;;:::i;:::-;3120:30799;;12005:50;;;;3120:30799;;;12005:50;3120:30799;;;;;;;;;12005:50;3120:30799;;;11566:199;11675:79;;;;;;:::i;:::-;11566:199;;;11499:57;11531:25;;;;-1:-1:-1;11499:57:44;;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;-1:-1:-1;;;;;11973:13:44;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:44;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:44;3120:30799;12005:50;;;;;;;;11917:1875;12332:13;;;12294:52;3120:30799;-1:-1:-1;;;;;12332:13:44;;;;:::i;:::-;3120:30799;;;;;;;;12294:52;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:38;;2000:58;;2153:5;;;:::i;:::-;3120:30799:44;465:4:38;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:44;-1:-1:-1;;;;;3120:30799:44;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:44;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;12488:1290;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;12005:50::-;;;;:::i;:::-;;;;11566:199;11675:79;;;;;:::i;:::-;11566:199;;11499:57;11531:25;;;;-1:-1:-1;11499:57:44;;9345:33;;;;;;3120:30799;9345:33;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9345:33;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;30298:9;3120:30799;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;30298:9;:::i;:::-;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;29131:28:44;;;:::i;:::-;29175:13;3120:30799;29190:13;;;;;;3120:30799;29205:3;29239:13;29306:5;-1:-1:-1;;;;;29239:13:44;3120:30799;29239:13;;;:::i;:::-;3120:30799;;29306:5;;;:::i;:::-;3120:30799;29175:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;-1:-1:-1;;;;;3120:30799:44;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30799:44;;;;;;;;;;1525:73:33;;;:::i;:::-;3120:30799:44;;;29588:52;;;;3120:30799;29588:52;;3120:30799;;;;29588:52;;3120:30799;;;;;29588:6;3120:30799;29588:52;;;;;;;;3120:30799;29689:5;;;;:::i;29588:52::-;3120:30799;29588:52;;3120:30799;29588:52;;;;;;3120:30799;29588:52;;;:::i;:::-;;;3120:30799;;;;29689:5;;-1:-1:-1;29588:52:44;;;;;-1:-1:-1;29588:52:44;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;1525:73:33;;;:::i;:::-;4720:5:44;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32783:40;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;32740:130;;;3120:30799;27118:4;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;;;;;;32699:32;32740:130;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:44;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;-1:-1:-1;;32966:103:44;;;;;;;33085:70;32966:103;32740:130;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;7577:130;7661:35;3120:30799;7661:35;3120:30799;;7661:35;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;1424:26:45;;-1:-1:-1;;;;;1424:26:45;3120:30799:44;;;1124:6:43;3120:30799:44;;1424:26:45;;;;;;;;;3120:30799:44;1424:26:45;;;3120:30799:44;;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30799:44;;;;;-1:-1:-1;;3120:30799:44;;;;;;;1525:73:33;;:::i;:::-;4720:5:44;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;15924:28;;;;:::i;:::-;15976:24;;;;:::i;:::-;16015:13;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;16010:124;16030:13;;;;;;3120:30799;;;;;;;:::i;:::-;;;;16045:3;3120:30799;;;;;16080:22;3120:30799;;;;;16109:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;16064:59;;;;:::i;:::-;3120:30799;;16015:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;15502:28;;;;:::i;:::-;15554:24;;;;:::i;:::-;15593:13;3120:30799;;-1:-1:-1;;;;;3120:30799:44;;;15588:121;15608:13;;;;;;3120:30799;;;;;;;:::i;15623:3::-;3120:30799;;;;;15658:19;3120:30799;;;;;15684:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;15642:56;;;;:::i;:::-;3120:30799;;15593:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;-1:-1:-1;;;;;1124:6:43;3120:30799:44;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;1525:73:33;;:::i;:::-;4720:5:44;7248:55;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;;;;;;;;25803:68;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;-1:-1:-1;;;;;3120:30799:44;;:::i;:::-;;;;14798:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:46;;:::i;:::-;-1:-1:-1;;;;;3120:30799:44;;;;;;;;;;;;;;;;23815:4;3120:30799;;;;;;;23948:56;;;;;;3120:30799;23948:56;;;;24044:57;;;;;;;;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;24632:37;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;24733:32;24817:38;24589:134;;;3120:30799;;;;;;;24549:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24817:38;:::i;:::-;3120:30799;;;;;;;;;:::i;:::-;;;;24774:135;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25031:90;3120:30799;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;;;;25136:92;;;;3120:30799;;;;;;25244:69;;3120:30799;;;;;;;;;24044:57;3120:30799;;;;23815:4;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;;23948:56;3120:30799;;;23948:56;;;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:44;;;;;;;;16627:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16753:81;;;;3120:30799;16749:176;;;3120:30799;16749:176;31750:39;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;31707:129;;;3120:30799;;;;;;;16627:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:44;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;-1:-1:-1;;31931:101:44;;;;;;;32048:68;31931:101;;;3120:30799;;;;;;32048:68;3120:30799;16753:81;16786:48;;;;;16753:81;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:44;;;;;;;;17109:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;17190:33;3120:30799;17238:82;;;;3120:30799;17234:179;;;3120:30799;17234:179;32783:40;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;32740:130;;;3120:30799;;;;;;;17109:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:44;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;-1:-1:-1;;32966:103:44;;;;;;;33085:70;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;17238:82;17271:49;;;;;17238:82;;;3120:30799;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:44;;;;;-1:-1:-1;;;;;3120:30799:44;;:::i;:::-;;;;14517:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:44;;;;;;14136:33;3120:30799;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;30461:21;3120:30799;;:::i;:::-;30461:21;;;:::i;:::-;;;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:44;;;;;;;;28563:31;3120:30799;;;;;;;28729:6;3120:30799;28776:55;;;;:::i;:::-;28729:103;;;;;3120:30799;;;28729:103;;-1:-1:-1;;;;;3120:30799:44;;;;;28729:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;-1:-1:-1;;28729:103:44;;;;;;;28852:68;28729:103;3120:30799;28729:103;;;3120:30799;;;;;;28852:68;3120:30799;7864:127;7947:33;3120:30799;7947:33;3120:30799;;7947:33;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;4975:9;3120:30799;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:44;;;;;;;;28180:30;3120:30799;;;;;;;28344:6;3120:30799;28390:54;;;;:::i;:::-;28344:101;;;;;3120:30799;;;28344:101;;-1:-1:-1;;;;;3120:30799:44;;;;;28344:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:44;;;;;;-1:-1:-1;;28344:101:44;;;;;;;28465:67;28344:101;3120:30799;28344:101;;;3120:30799;;;;;;28465:67;3120:30799;28344:101;;;;:::i;:::-;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;16364:79;3120:30799;;;;16364:79;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:44;;;;;-1:-1:-1;;;;;3120:30799:44;;:::i;:::-;;;;15055:30;3120:30799;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:44;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30799:44;;;21277:33;;:6;;3120:30799;21277:6;;;3120:30799;21277:33;;;;;;;;3120:30799;21277:33;;;3120:30799;;;21362:4;;21325:42;;21321:104;;3120:30799;;;;;;;;;;;;;;21435:87;;3120:30799;;;;;;;;;21557:4;3120:30799;;;;;;;;;;21634:49;;;3120:30799;21634:49;;3120:30799;;21634:49;3120:30799;21634:49;;;;;;;;;3120:30799;;;21634:49;;;3120:30799;21776:36;;;;:::i;:::-;3120:30799;;;;;;;:::i;:::-;;;;;;;21733:133;;;3120:30799;;;;;;;;21693:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21941:72;3120:30799;21941:72;;;3120:30799;21941:72;;3120:30799;;21941:72;3120:30799;21941:72;;;;;;;;;3120:30799;;;21941:72;;;3120:30799;22107:37;;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;22064:135;;;3120:30799;;;;;;;;22023:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;22731:54;;;3120:30799;22731:54;;3120:30799;22731:54;;3120:30799;22731:54;;;;3120:30799;;22731:54;;;3120:30799;22727:277;;;;3120:30799;22727:277;;;3120:30799;;;;23018:55;;;;3120:30799;23018:55;;;3120:30799;23018:55;;3120:30799;23018:55;;3120:30799;;23018:55;;;3120:30799;23014:281;;;3120:30799;23014:281;23136:31;3120:30799;;;;;;;;;;;23018:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;23018:55;;;;;;;;;22727:277;3120:30799;;;22847:30;3120:30799;;;;;;22727:277;;;22731:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;22731:54;;3120:30799;22731:54;;;;;;;21941:72;22107:37;21941:72;;;;;3120:30799;21941:72;3120:30799;21941:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21634:49;21776:36;21634:49;;;;;3120:30799;21634:49;3120:30799;21634:49;;;;;;;:::i;:::-;;;;21435:87;21484:27;;3120:30799;21484:27;3120:30799;;;;21484:27;21321:104;21390:24;3120:30799;21390:24;3120:30799;;21390:24;21277:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;21277:33;;;;;;;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:44;;;;;;;-1:-1:-1;;;;;3120:30799:44;;:::i;:::-;;;;15252:31;3120:30799;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:44;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30799:44;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30799:44;;;;;;;;4720:5;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:33:-;3120:30799:44;;;2303:50:33;;;2320:22;;3120:30799:44;;;;;;;2303:50:33;;;;;;:::i;:::-;3120:30799:44;2293:61:33;;1931:430;:::o;3120:30799:44:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8733:151::-;8808:68;8733:151;-1:-1:-1;3120:30799:44;-1:-1:-1;;;;;3120:30799:44;;8808:68;;3120:30799;8808:68;;;;;;;;;;3120:30799;8808:68;;;3120:30799;8808:68;;;;;;:::i;:::-;3120:30799;;8794:83;;;;;;;3120:30799;8794:83;;;8808:68;8794:83;;3120:30799;;;;;8808:68;3120:30799;;;;;;;;;;;;;;;;;;8794:83;;:6;;3120:30799;8794:83;;;;;;;;8733:151;;:::o;8794:83::-;;;-1:-1:-1;8794:83:44;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30799:44;;;;;;;;;8733:151::o;3120:30799::-;;;;;;;;;;-1:-1:-1;;;;;3120:30799:44;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13291:213:59;3120:30799:44;13369:24:59;;;;13365:103;;3120:30799:44;13291:213:59;:::o;13365:103::-;13416:41;;;13447:2;13416:41;3120:30799:44;;;;13416:41:59;;3120:30799:44;;;;;;;;;;:::o;19669:4:32:-;;465::38;19669::32;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;18132:1064:44:-;;18361:104;19669:4:32;5832:87:38;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:32;18361:104:44;;:::i;:::-;19669:4:32;;;;;;;;;;;;;;;18132:1064:44;:::o;19202:340::-;-1:-1:-1;;;;;19298:21:44;;;;;:::i;:::-;3120:30799;19334:25;;19330:93;;19452:10;19437:25;19433:103;;19202:340;;:::o;19433:103::-;19485:40;19357:1;19485:40;19452:10;19485:40;3120:30799;;;;;19357:1;19485:40;19330:93;19382:30;;19357:1;19382:30;3120:30799;19382:30;3120:30799;;19357:1;19382:30;3120:30799;;;-1:-1:-1;;;;;3120:30799:44;;;;;;:::o;19813:201::-;3120:30799;;;;19933:32;;-1:-1:-1;;;;;3120:30799:44;;;19933:32;;;3120:30799;19933:32;3120:30799;;;19933:6;3120:30799;;19933:32;;;;;;;-1:-1:-1;19933:32:44;;;19813:201;19983:24;;3120:30799;;19813:201;:::o;19933:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;19933:32;3120:30799;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19933:32;;;;;;-1:-1:-1;19933:32:44;;;3120:30799;;;-1:-1:-1;3120:30799:44;;;;;30496:616;;30631:28;;;:::i;:::-;30675:13;;30687:1;30690:13;;;;;;30496:616;;;;;:::o;30705:3::-;3120:30799;;-1:-1:-1;;;;;30739:13:44;;;;;:::i;:::-;3120:30799;;;;;;30687:1;3120:30799;30794:22;3120:30799;;;;;;;30687:1;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30847:20;;30843:253;;30705:3;;;;;;;;3120:30799;30675:13;;30843:253;31015:66;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30687:1;3120:30799;;;30687:1;3120:30799;;;;30974:16;;;;;:::i;:::-;3120:30799;;;;;;31015:66;;30843:253;;;;;;;;;509:165:46;-1:-1:-1;;;;;586:6:46;3120:30799:44;564:10:46;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30799:44;;616:41:46;;1688:201:33;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30799:44;;;1336:22:43;;;:6;;;:22;:6;;;3120:30799:44;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;3120:30799:44;;;;;1336:64:43;;;;;3120:30799:44;1336:64:43;;:22;:64;;3120:30799:44;1820:10:33;3120:30799:44;;;;1394:4:43;3120:30799:44;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:43;1774:7:33;1854:18;1336:64:43;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799:44;;;;;;;:::i;:::-;1336:64:43;;;;;;;;;:22;3120:30799:44;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;19548:199:44;;-1:-1:-1;;;;;3120:30799:44;;;19679:26;3120:30799;19679:26;;3120:30799;19679:26;;;3120:30799;19679:26;:6;3120:30799;19679:6;;;3120:30799;19679:26;;;;;;;;;;;19548:199;19670:35;;;3120:30799;19548:199;:::o;19679:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19679:26;;;;;;;;;;3120:30799;;;;;;;;;;;;;;;;;;;;33168:749;19669:4:32;;;;;;;;;;;;;;;;;;33769:74:44;33765:146;;33168:749::o;33765:146::-;33866:34;-1:-1:-1;33866:34:44;;-1:-1:-1;33866:34:44;29708:403;;;-1:-1:-1;;;;;3120:30799:44;;;;;-1:-1:-1;3120:30799:44;29832:19;3120:30799;;;-1:-1:-1;3120:30799:44;;;;;;;-1:-1:-1;3120:30799:44;;;;-1:-1:-1;3120:30799:44;;29878:20;;29874:231;;29708:403;;;;;;;:::o;29874:231::-;3120:30799;29994:16;3120:30799;30031:63;3120:30799;;;;-1:-1:-1;3120:30799:44;29832:19;3120:30799;;;-1:-1:-1;3120:30799:44;;-1:-1:-1;3120:30799:44;;;-1:-1:-1;3120:30799:44;;;;29994:16;:::i;:::-;3120:30799;;;;;;30031:63;;29874:231;;;;;;;;17425:701;-1:-1:-1;;;;;3120:30799:44;17624:399;3120:30799;17882:32;3120:30799;;18040:79;3120:30799;;17624:399;3120:30799;;;17975:31;3120:30799;;;17624:399;3120:30799;;18040:79;;:::i;17425:701::-;-1:-1:-1;;;;;3120:30799:44;-1:-1:-1;3120:30799:44;;;;18040:79;3120:30799;;-1:-1:-1;3120:30799:44;;;17791:30;3120:30799;;;-1:-1:-1;3120:30799:44;;18040:79;;:::i;1303:160:55:-;3120:30799:44;;;1412:43:55;;;;;;-1:-1:-1;;;;;3120:30799:44;;;1412:43:55;;;3120:30799:44;;;;;;;;;1412:43:55;;;3120:30799:44;3510:55:56;;-1:-1:-1;;;;1412:43:55;3120:30799:44;1412:43:55;3120:30799:44;;1412:43:55;:::i;:::-;3120:30799:44;3462:31:56;;;;;;;3120:30799:44;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:56;1412:43:55;3120:30799:44;;;;3510:55:56;;:::i;:::-;3120:30799:44;;4551:22:55;;;;:57;;;;3120:30799:44;4547:135:55;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:56;4631:40:55;;3120:30799:44;1412:43:55;2847:1:56;4631:40:55;4551:57;4578:30;;;;1412:43;4578:30;;;3120:30799:44;;;;1412:43:55;3120:30799:44;4578:30:55;;3120:30799:44;:::i;:::-;4577:31:55;4551:57;;;;3120:30799:44;;;;;4625:582:56;;4797:8;;-1:-1:-1;3120:30799:44;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3120:30799:44;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:56;;5066:1;5121:24;3120:30799:44;5121:24:56;3120:30799:44;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:46:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:46;;;;-1:-1:-1;;;;;308:368:46;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:46;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:46;;;;;;-1:-1:-1;308:368:46;;;;;-1:-1:-1;308:368:46"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:46:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol":{"AggregatorV3Interface":{"abi":[{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"decimals()":"313ce567","description()":"7284e416","getRoundData(uint80)":"9a6fc8f5","latestRoundData()":"feaf968c","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":\"AggregatorV3Interface\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"IERC1271":{"abi":[{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"isValidSignature(bytes32,bytes)":"1626ba7e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC1271 standard signature validation method for contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\",\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with _data\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":\"IERC1271\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743\",\"dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:55:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:55:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:56:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:56:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:59:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:59:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"EnumerableSet":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122073d6bbc1b119ba552750d1675f4b8ac27572b5890d6deea43dad7145640ee16264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0xD6BBC1B119BA552750D1675F4B8AC27572B5890D PUSH14 0xEEA43DAD7145640EE16264736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"1330:11640:60:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122073d6bbc1b119ba552750d1675f4b8ac27572b5890d6deea43dad7145640ee16264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0xD6BBC1B119BA552750D1675F4B8AC27572B5890D PUSH14 0xEEA43DAD7145640EE16264736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"1330:11640:60:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ```solidity contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]}},\"version\":1}"}},"contracts/BalancerContractRegistry.sol":{"BalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"InconsistentState","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6112ec38819003918201601f19168301916001600160401b0383118484101761009e5780849260209460405283398101031261009a57516001600160a01b03811680820361009a57306080521561008b5760a05260405161123990816100b3823960805181610fb7015260a0518181816106c60152818161076701526110c30152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea26469706673582212206eb6cddb650a39b69688ee2b063d53cacbccbc2a50785c75ecf83f1fee38a41964736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x12EC CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0x9A JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x8B JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1239 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xFB7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x6C6 ADD MSTORE DUP2 DUP2 PUSH2 0x767 ADD MSTORE PUSH2 0x10C3 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0xB6CDDB650A39B69688EE2B063D53CA 0xCB 0xCC 0xBC 0x2A POP PUSH25 0x5C75ECF83F1FEE38A41964736F6C634300081B003300000000 ","sourceMap":"2741:12089:61:-:0;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;-1:-1:-1;;;;;2741:12089:61;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2741:12089:61;;;;;;;922:4:45;1347:46:33;;943:28:43;939:79;;1028:14;;2741:12089:61;;;;;;;;1347:46:33;2741:12089:61;;;;;1028:14:43;2741:12089:61;;;;;;;;;;;;;;;;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;2741:12089:61;-1:-1:-1;2741:12089:61;;;;;;-1:-1:-1;2741:12089:61;;;;;-1:-1:-1;2741:12089:61"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3478,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_12134":{"entryPoint":3513,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4081,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":3686,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_ContractType":{"entryPoint":3802,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":3885,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_address":{"entryPoint":4125,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":3621,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_12135":{"entryPoint":3548,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":4177,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":3980,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getContractId":{"entryPoint":4571,"id":13199,"parameterSlots":1,"returnSlots":1},"packed_hashed_string_to_string":{"entryPoint":3952,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_enum_ContractType":{"entryPoint":3872,"id":null,"parameterSlots":1,"returnSlots":1},"write_to_memory_enum_ContractType":{"entryPoint":3860,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":4023}],"6692":[{"length":32,"start":1734},{"length":32,"start":1895},{"length":32,"start":4291}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea26469706673582212206eb6cddb650a39b69688ee2b063d53cacbccbc2a50785c75ecf83f1fee38a41964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0xB6CDDB650A39B69688EE2B063D53CA 0xCB 0xCC 0xBC 0x2A POP PUSH25 0x5C75ECF83F1FEE38A41964736F6C634300081B003300000000 ","sourceMap":"2741:12089:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;2741:12089:61;1424:26:45;;;2741:12089:61;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1525:73:33;;:::i;:::-;7303:29:61;;7299:88;;2741:12089;;7401:31;7397:90;;2741:12089;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;7612:123;;7841:28;;;;:::i;:::-;2741:12089;;;;;;;;;;;;;7956:37;7952:197;;2741:12089;;;;8245:16;2741:12089;;;;;;;8287:34;8283:132;;2741:12089;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8728:124;;;;:::i;:::-;;;;2741:12089;7572:13;2741:12089;;7572:13;8728:124;;;2741:12089;;;;;;;;;;;;;;;;;;;;;8868:71;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8868:71;:::i;:::-;;;2741:12089;8868:71;;2741:12089;;;;;;;;;;;8283:132;2741:12089;8344:60;2741:12089;;;;8344:60;;;;;;;;;:::i;:::-;;;;7952:197;2741:12089;;;8106:17;2741:12089;;;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8106:17;:::i;:::-;2741:12089;;;;8076:62;;;;;;;;2741:12089;;:::i;:::-;;;;;;;;;;:::i;7612:123::-;2741:12089;;;;;;;;;;7656:68;2741:12089;7656:68;2741:12089;;;;;7656:68;7397:90;7455:21;2741:12089;7455:21;2741:12089;7455:21;7299:88;7355:21;2741:12089;7355:21;2741:12089;7355:21;2741:12089;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:33;;;:::i;:::-;2741:12089:61;;9098:31;9094:90;;9256:28;;;:::i;:::-;2741:12089;;;;;;;;;;;;;9364:29;;;9360:106;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;9629:112;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:78;;;;:::i;:::-;;;2741:12089;9850:78;;2741:12089;9629:112;2741:12089;;9682:48;;;2741:12089;9682:48;2741:12089;;9682:48;;;;:::i;9360:106::-;2741:12089;;;;;9416:39;;;;;;;;2741:12089;;;;;;:::i;9094:90::-;9152:21;;2741:12089;9152:21;2741:12089;9152:21;2741:12089;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;;;13166:33;13149:50;;;;;2741:12089;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;1424:26:45;2741:12089:61;;1424:26:45;;2741:12089:61;1424:26:45;;1124:6:43;;;2741:12089:61;1424:26:45;;;;;;;;;;2741:12089:61;1424:26:45;;;2741:12089:61;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2741:12089:61;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;1124:6:43;2741:12089:61;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;14436:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;2741:12089:61;10083:29;;;10079:88;;2741:12089;;;10204:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:109;;2741:12089;;;10499:102;;2741:12089;;;;;;10204:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10968:43;2741:12089;10968:43;;2741:12089;10499:102;10548:42;;;2741:12089;10548:42;2741:12089;;;10548:42;10300:109;10353:45;;;2741:12089;10353:45;2741:12089;;;10353:45;2741:12089;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13412:13;13458:28;2741:12089;13458:28;;:::i;:::-;2741:12089;;;;;;;;;;;;;13641:31;;;13637:110;;2741:12089;;;;;;13784:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;14100:54;;;2741:12089;14096:158;;;;;2741:12089;;;;;;;;;;;;;;;;14096:158;2741:12089;;14170:35;;-1:-1:-1;2741:12089:61;;;-1:-1:-1;14096:158:61;;;;14100:54;2741:12089;;;-1:-1:-1;2741:12089:61;;;;;;;14121:33;14100:54;;;;;13637:110;2741:12089;;13708:16;2741:12089;;;;;;;;13637:110;;;2741:12089;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;2741:12089:61;;11263:32;11259:92;;2741:12089;;;;11365:29;;;11361:88;;2741:12089;;;;;11540:13;2741:12089;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11580:109;;12074:29;;;:::i;:::-;2741:12089;;;;;;;;;;;;12190:37;12186:193;;2741:12089;12521:52;2741:12089;;12459:16;2741:12089;;;;;;;;;;;;;;;12521:52;:::i;:::-;;2741:12089;12521:52;;2741:12089;12186:193;2741:12089;12335:17;2741:12089;;;;;;;;11540:13;2741:12089;;;;;;;;;;;;:::i;12335:17::-;2741:12089;;;;12310:58;;;;;;;;2741:12089;;:::i;11580:109::-;11633:45;;;2741:12089;11633:45;2741:12089;;;11633:45;11361:88;11417:21;;2741:12089;11417:21;2741:12089;11417:21;11259:92;11318:22;2741:12089;11318:22;2741:12089;11318:22;2741:12089;;;;;;;;-1:-1:-1;;2741:12089:61;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;14638:19;2741:12089;;13166:33;13149:50;;;;2741:12089;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2741:12089:61;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;2741:12089:61;;;;;-1:-1:-1;2741:12089:61;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:61;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:61;;;;;;:::o;1931:430:33:-;2741:12089:61;;;2303:50:33;;;2320:22;;2741:12089:61;;;;;;;2303:50:33;;;;;;:::i;:::-;2741:12089:61;2293:61:33;;1931:430;:::o;2741:12089:61:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;1688:201:33:-;1762:20;1774:7;;;;1762:20;:::i;:::-;2741:12089:61;;;;1336:22:43;;;:6;;;:22;:6;;;2741:12089:61;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;2741:12089:61;;;;;1336:64:43;;;;;2741:12089:61;1336:64:43;;:22;:64;;2741:12089:61;1820:10:33;2741:12089:61;;;;1394:4:43;2741:12089:61;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:43;1774:7:33;1854:18;1336:64:43;;;;;;;;;;;;;;;;:::i;:::-;;;2741:12089:61;;;;;;;;;;;;1336:64:43;;;;;;;;;;2741:12089:61;;;1774:7:33;2741:12089:61;;;;;1336:22:43;2741:12089:61;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;14679:149:61;2741:12089;;14790:30;;;;;;;2741:12089;;;;;;;;;;;-1:-1:-1;2741:12089:61;;;;14790:30;;;;;;;:::i"},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","getVault()":"8d928af8","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"InconsistentState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main purposes. The first is to support the many instances where we need to know that a contract is \\\"trusted\\\" (i.e., is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could spoof the sender and \\\"fool\\\" the hook. The hook must therefore \\\"trust\\\" the Router. It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all \\\"ERC4626\\\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`), since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to keep track of \\\"known good\\\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns true for fully-compliant tokens with properly initialized buffers. Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address, and query this contract to determine whether the Router is a \\\"trusted\\\" one. The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \\\"latest\\\" Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state. Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this contract for the Vault address, so it doesn't need to be a type.\",\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}],\"InconsistentState(string,address)\":[{\"details\":\"This should never happen.\",\"params\":{\"contractAddress\":\"The address of the contract with missing state\",\"contractName\":\"The name of the contract that has a registry entry but no contract info\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"_0\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InconsistentState(string,address)\":[{\"notice\":\"A `_contractRegistry` entry has no corresponding `_contractInfo`.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"notice\":\"On-chain registry of standard Balancer contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistry.sol\":\"BalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/BalancerContractRegistry.sol\":{\"keccak256\":\"0xe663b63efd85bfd87be43f71aa1ab26bea25b774d28a7395247dae4c7c574549\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56b5ebe6871f2531c7c5f640ecc3a71819502aabaed032ae7b1b097c1de6bbec\",\"dweb:/ipfs/QmVNHtCJWMuQcQBq5zbucsTXAHdGpzgGNkvt7TAxHtvxGW\"]}},\"version\":1}"}},"contracts/CallAndRevert.sol":{"CallAndRevert":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576103b0908161001a8239f35b5f80fdfe6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea264697066735822122027a3808c6ba8335e514cee6562c3e784b479a87c753694d6c1e7b69553857ee764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x3B0 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x27 LOG3 DUP1 DUP13 PUSH12 0xA8335E514CEE6562C3E784B4 PUSH26 0xA87C753694D6C1E7B69553857EE764736F6C634300081B003300 ","sourceMap":"241:1325:62:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":566,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":679,"id":null,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":737,"id":10196,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea264697066735822122027a3808c6ba8335e514cee6562c3e784b479a87c753694d6c1e7b69553857ee764736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x27 LOG3 DUP1 DUP13 PUSH12 0xA8335E514CEE6562C3E784B4 PUSH26 0xA87C753694D6C1E7B69553857EE764736F6C634300081B003300 ","sourceMap":"241:1325:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19;;;;;241:1325;;;;;;;;;;;:::i;:::-;;;;;;;;;;;840:718;;;;241:1325;990:10;;955:63;241:1325;990:10;241:1325;990:10;;955:63;:::i;:::-;;241:1325;;1084:26;;;;;;;;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26;;;;840:718;241:1325;;;;;1443:21:36;1439:82;;1344:27:62;241:1325;1530:151:36;;;;241:1325:62;1327:44;1323:110;;241:1325;;1881:21:36;:17;;2008:160;;;;;;1877:362;2205:23;241:1325:62;2205:23:36;241:1325:62;2205:23:36;1323:110:62;1398:20;241:1325;1398:20;241:1325;1398:20;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;4625:582:56:-;;4797:8;;-1:-1:-1;241:1325:62;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;241:1325:62;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;241:1325:62;5121:24:56;;5066:1;5121:24;241:1325:62;5121:24:56;241:1325:62;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CallAndRevert.sol\":\"CallAndRevert\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]}},\"version\":1}"}},"contracts/CowSwapFeeBurner.sol":{"CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_vaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":763,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"610160604052346102f7576128808038038061001a816102fb565b928339810160a0828203126102f75781516001600160a01b0380821693909291908482036102f7576020808201519585871687036102f757604083015195861686036102f757606083015194608084015160018060401b03948582116102f7570194601f928284880112156102f75786518681116102d457601f19976100a58287018a1688016102fb565b948286528783830101116102f757815f92888093018388015e8501015230608052156102e85760a05280519384116102d4575f54926001938481811c911680156102ca575b828210146102b657838111610273575b50809285116001146102135750839450908392915f94610208575b50501b915f199060031b1c1916175f555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560c0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960e0526101009283526101209182526101409081526040519161255f9384610321853960805184611abd015260a0518481816109b601528181610afa0152611bd3015260c05184612136015260e051846120c5015251838181610aaa015281816111150152818161131b01526122ec01525182818161032e0152818161052601528181610a5a0152611e00015251818181610b35015261210a0152f35b015192505f80610115565b9294849081165f8052845f20945f905b888383106102595750505010610241575b505050811b015f55610126565b01515f1960f88460031b161c191690555f8080610234565b858701518855909601959485019487935090810190610223565b5f8052815f208480880160051c8201928489106102ad575b0160051c019085905b8281106102a25750506100fa565b5f8155018590610294565b9250819261028b565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100ea565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102d45760405256fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a71461170a5750806314a2a784146114325780631626ba7e14610e8957806354fd4d5014610d4c57806360e092c614610cd057806368bce71214610c0a5780636eba2b1314610bdd5780636f9d75cd14610ba8578063851c1bb314610b585780638aebd34814610b1e5780638d928af814610ace57806393504c5214610a7e5780639b552cc214610a2e578063aaabadc514610963578063b8296fc414610849578063d83b06a4146107285763de557a32146100d7575f80fd5b346106085760e0600319360112610608576100f0611859565b6100f861187c565b9060643573ffffffffffffffffffffffffffffffffffffffff811681036106085760a4359073ffffffffffffffffffffffffffffffffffffffff8216820361060857610142611b61565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6107005760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216145f146102455760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b604435156106a257610258608435612209565b61026360c43561226e565b61026c84611cdf565b506004811015806106685781151580610695575b6106395750506040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260443560648201526064815260a081019080821067ffffffffffffffff83111761060c576102ec91604052856123f6565b6102f5846122d4565b604051905f80602084017f095ea7b3000000000000000000000000000000000000000000000000000000008152610387856103796044357f0000000000000000000000000000000000000000000000000000000000000000602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03601f198101875286611922565b8451908273ffffffffffffffffffffffffffffffffffffffff8a165af16103ac6123c7565b8161057c575b5073ffffffffffffffffffffffffffffffffffffffff806060937f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d9584839590610570575b156104f3575b508863ffffffff600360405161041281611906565b858516815260208101868c16815260408201906084358252878b8401968660c435168852165f5260016020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790558160405197604435895260843560208a0152166040880152169616941692a45f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61056a906105646040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820152857f00000000000000000000000000000000000000000000000000000000000000001660248201525f60448201526044815261055e81611906565b8c6123f6565b8a6123f6565b5f6103fd565b50828a163b15156103f7565b80518015925082156105a5575b505073ffffffffffffffffffffffffffffffffffffffff6103b2565b8193925090602091810103126106085773ffffffffffffffffffffffffffffffffffffffff8080927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d956105fd6020606097016119a7565b945095509350610589565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526106685760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610280565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461060857606060031936011261060857610741611859565b60443560243561074f611b61565b61075883611cdf565b906004811015610668576003810361081e577f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a60808686868661079a82612209565b6107a38361226e565b61080673ffffffffffffffffffffffffffffffffffffffff851694855f526001602052600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556122d4565b604051938452602084015260408301526060820152a1005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346106085760a060031936011261060857610862611859565b5061086b61187c565b5067ffffffffffffffff6064358181116106085761088d90369060040161189f565b6084929192359182116106085761095f926108af6108b693369060040161189f565b5050611b23565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610608575f600319360112610608576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610a23576020925f926109f4575b5060405191168152f35b610a15919250833d8511610a1c575b610a0d8183611922565b810190611af7565b90836109ea565b503d610a03565b6040513d5f823e3d90fd5b34610608575f60031936011261060857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610608575f60031936011261060857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610608575f60031936011261060857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610608575f6003193601126106085760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610608576020600319360112610608576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361060857610ba0602091611a92565b604051908152f35b3461060857602060031936011261060857610bc9610bc4611859565b611cdf565b506040516004821015610668576020918152f35b346106085760206003193601126106085761095f6108b6610bfc611859565b610c04611a3a565b50611ffb565b3461060857604060031936011261060857610c23611859565b610c2b61187c565b90610c34611b61565b604051917f70a0823100000000000000000000000000000000000000000000000000000000835230600484015260208360248173ffffffffffffffffffffffffffffffffffffffff86165afa918215610a23575f92610c9a575b610c989350611db2565b005b91506020833d602011610cc8575b81610cb560209383611922565b8101031261060857610c98925191610c8e565b3d9150610ca8565b3461060857604060031936011261060857610ce9611859565b610cf161187c565b610cf9611b61565b610d0282611cdf565b91909260048410156106685760038403610d2057610c989350611db2565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610608575f600319360112610608576040515f5f549060018260011c9160018416918215610e7f575b6020948585108414610e525785879486865291825f14610e14575050600114610dbb575b50610da792500383611922565b61095f604051928284938452830190611961565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310610dfc575050610da7935082010185610d9a565b80548389018501528794508693909201918101610de5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610da795151560051b8501019250879150610d9a9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610d76565b346106085760406003193601126106085767ffffffffffffffff602435818111610608573660238201121561060857806004013590610ec782611945565b91610ed56040519384611922565b8083526020830191366024838301011161060857815f92602460209301853784010152815182019260208401838503936101a08086126106085761018080961261060857610f2e60405195610f29876118cd565b611986565b8552610f3c60408301611986565b602086015260608201519573ffffffffffffffffffffffffffffffffffffffff9687811681036106085760408701526080830151606087015260a0830151608087015260c083015163ffffffff811681036106085760a087015260e083015160c0870152610100908184015160e088015261012091828501519088015261014091610fc88386016119a7565b90880152610160918285015190880152830151908601528101519083821161060857016060818703126106085760405195611002876118ea565b602082015184811161060857820183603f820112156106085760208101519085821161060c578160051b6040519261103d6020830185611922565b8352604060208401918301019186831161060857604001905b8282106114225750505087526040820151848111610608576060908301809203126106085760405190611088826118ea565b6020810151878116810361060857825260408101516020830152606081015185811161060857602085916110bd9301016119b4565b604082015260208701526060810151928311610608576110e092016020016119b4565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a23575f926113ec575b50906112086111fa926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611922565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106113d3578560206113058b8b8b6112a5866112978d8d60406112858b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc093848883030160608901526119fa565b92015190848303016080850152611961565b03601f198101885287611922565b611317604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611961565b906003198483030160c4850152611961565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a23575f90611377575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d6020116113cb575b8161139160209383611922565b8101031261060857517fffffffff00000000000000000000000000000000000000000000000000000000811681036106085760209061134a565b3d9150611384565b8251845289955060209384019390920191600101611231565b91506020823d60201161141a575b8161140760209383611922565b8101031261060857905190611208611145565b3d91506113fa565b8151815260209182019101611056565b34610608576102606003193601126106085761144c611859565b5061145561187c565b5067ffffffffffffffff60a4358181116106085761147790369060040161189f565b919060c4358281116106085761149190369060040161189f565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c360112610608576114c991611b23565b916101643592836080820180518211611702575b505060405161159f8161159160208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611922565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610608578752610104358181168091036106085760408401526101243590811680910361060857606083015261014435608083015260a08201526101843563ffffffff81168091036106085760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036106085761014086015261022435610160860152610244358186015284526101a084019687118488101761060c5786604052835190200361168757005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b5283856114dd565b3461060857602060031936011261060857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610608577f62af8dc200000000000000000000000000000000000000000000000000000000821461183157817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611807575b81156117dd575b81156117b3575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836117ac565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506117a5565b7fb8296fc4000000000000000000000000000000000000000000000000000000008114915061179e565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361060857565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361060857565b9181601f840112156106085782359167ffffffffffffffff8311610608576020838186019501011161060857565b610180810190811067ffffffffffffffff82111761060c57604052565b6060810190811067ffffffffffffffff82111761060c57604052565b6080810190811067ffffffffffffffff82111761060c57604052565b90601f601f19910116810190811067ffffffffffffffff82111761060c57604052565b67ffffffffffffffff811161060c57601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361060857565b5190811515820361060857565b81601f82011215610608578051906119cb82611945565b926119d96040519485611922565b8284526020838301011161060857815f9260208093018386015e8301015290565b9060606040611a379373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611961565b90565b60405190611a47826118cd565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152611af1816118ea565b51902090565b90816020910312610608575173ffffffffffffffffffffffffffffffffffffffff811681036106085790565b9081602091611b30611a3a565b5081010312610608573573ffffffffffffffffffffffffffffffffffffffff811680910361060857611a3790611ffb565b611b8d7fffffffff000000000000000000000000000000000000000000000000000000005f3516611a92565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a235784925f92611cbd575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610a23575f92611c87575b505015611c5f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311611cb6575b611c9e8183611922565b8101031261060857611caf906119a7565b5f80611c56565b503d611c94565b6064919250611cd890843d8611610a1c57610a0d8183611922565b9190611c05565b73ffffffffffffffffffffffffffffffffffffffff1690815f52600160205263ffffffff600360405f200154168015611daa576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610a23575f93611d76575b5082611d64575060029190565b4211611d705760019190565b60039190565b9092506020813d602011611da2575b81611d9260209383611922565b810103126106085751915f611d57565b3d9150611d85565b505f91508190565b919091604090815193602093848601947f095ea7b3000000000000000000000000000000000000000000000000000000009384875273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000168060248b01525f60448b015260448a52611e398a611906565b5f808885169a8c5190828d5af1611e4e6123c7565b81611f68575b50917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9a60609a9998979695949284611f139590611f5e575b15611f23575b5050505f8881526001808552888220828155908101829055600281018290556003015586517fa9059cbb000000000000000000000000000000000000000000000000000000008185015273ffffffffffffffffffffffffffffffffffffffff861660248201526044810185905290611f0e82606481016111fa565b6123f6565b84519586528501521690820152a1565b611f5692611f50918b51918883015260248201525f604482015260448152611f4a81611906565b846123f6565b826123f6565b5f8080611e93565b508a3b1515611e8d565b8051801592508215611f9e575b507f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9050611e54565b81949250908695939b9a999897969181010312610608577f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9a60609a611fe886611f1396016119a7565b929450929495969798999a819c50611f75565b612003611a3a565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600182526040805f20600382519261203a84611906565b848354168452846001840154169486850195865260028401549382860194855263ffffffff938491015416946060810195808752156121ac5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa9485156121a2575f95612173575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986120f18a6118cd565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161219b575b61218b8183611922565b810103126106085751935f6120bd565b503d612181565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b1561221057565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161227657565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff918085108386111761060c57848452612342856118ea565b3085525f60608201526080810152803b156106085761239a5f9491859285519687809481937f6bfae1ca00000000000000000000000000000000000000000000000000000000835289600484015260448301906119fa565b6001602483015203925af180156123bd576123b457505050565b821161060c5752565b82513d5f823e3d90fd5b3d156123f1573d906123d882611945565b916123e66040519384611922565b82523d5f602084013e565b606090565b5f8073ffffffffffffffffffffffffffffffffffffffff61242c93169360208151910182865af16124256123c7565b9083612490565b805190811515918261246d575b50506124425750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b819250906020918101031261060857602061248891016119a7565b155f80612439565b906124cd57508051156124a557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612520575b6124de575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156124d656fea2646970667358221220f9fcc2f5840b262c69cb2940b8cbd701ace30f08939152be0ebeee9d4f52375064736f6c634300081b0033","opcodes":"PUSH2 0x160 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x2F7 JUMPI PUSH2 0x2880 DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0xA0 DUP3 DUP3 SUB SLT PUSH2 0x2F7 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP5 DUP3 SUB PUSH2 0x2F7 JUMPI PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP6 DUP6 DUP8 AND DUP8 SUB PUSH2 0x2F7 JUMPI PUSH1 0x40 DUP4 ADD MLOAD SWAP6 DUP7 AND DUP7 SUB PUSH2 0x2F7 JUMPI PUSH1 0x60 DUP4 ADD MLOAD SWAP5 PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP5 DUP6 DUP3 GT PUSH2 0x2F7 JUMPI ADD SWAP5 PUSH1 0x1F SWAP3 DUP3 DUP5 DUP9 ADD SLT ISZERO PUSH2 0x2F7 JUMPI DUP7 MLOAD DUP7 DUP2 GT PUSH2 0x2D4 JUMPI PUSH1 0x1F NOT SWAP8 PUSH2 0xA5 DUP3 DUP8 ADD DUP11 AND DUP9 ADD PUSH2 0x2FB JUMP JUMPDEST SWAP5 DUP3 DUP7 MSTORE DUP8 DUP4 DUP4 ADD ADD GT PUSH2 0x2F7 JUMPI DUP2 PUSH0 SWAP3 DUP9 DUP1 SWAP4 ADD DUP4 DUP9 ADD MCOPY DUP6 ADD ADD MSTORE ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x2E8 JUMPI PUSH1 0xA0 MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x2D4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x2CA JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x2B6 JUMPI DUP4 DUP2 GT PUSH2 0x273 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x213 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x208 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xC0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP3 DUP4 MSTORE PUSH2 0x120 SWAP2 DUP3 MSTORE PUSH2 0x140 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x255F SWAP4 DUP5 PUSH2 0x321 DUP6 CODECOPY PUSH1 0x80 MLOAD DUP5 PUSH2 0x1ABD ADD MSTORE PUSH1 0xA0 MLOAD DUP5 DUP2 DUP2 PUSH2 0x9B6 ADD MSTORE DUP2 DUP2 PUSH2 0xAFA ADD MSTORE PUSH2 0x1BD3 ADD MSTORE PUSH1 0xC0 MLOAD DUP5 PUSH2 0x2136 ADD MSTORE PUSH1 0xE0 MLOAD DUP5 PUSH2 0x20C5 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0xAAA ADD MSTORE DUP2 DUP2 PUSH2 0x1115 ADD MSTORE DUP2 DUP2 PUSH2 0x131B ADD MSTORE PUSH2 0x22EC ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x32E ADD MSTORE DUP2 DUP2 PUSH2 0x526 ADD MSTORE DUP2 DUP2 PUSH2 0xA5A ADD MSTORE PUSH2 0x1E00 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xB35 ADD MSTORE PUSH2 0x210A ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x115 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x259 JUMPI POP POP POP LT PUSH2 0x241 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x126 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x234 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x2AD JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2A2 JUMPI POP POP PUSH2 0xFA JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x294 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x28B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xEA JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x2D4 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x170A JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1432 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0xE89 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xD4C JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xCD0 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC0A JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xBDD JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xBA8 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xB58 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xB1E JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xACE JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA7E JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xA2E JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x849 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x728 JUMPI PUSH4 0xDE557A32 EQ PUSH2 0xD7 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xF0 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xF8 PUSH2 0x187C JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI PUSH2 0x142 PUSH2 0x1B61 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x700 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH0 EQ PUSH2 0x245 JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x44 CALLDATALOAD ISZERO PUSH2 0x6A2 JUMPI PUSH2 0x258 PUSH1 0x84 CALLDATALOAD PUSH2 0x2209 JUMP JUMPDEST PUSH2 0x263 PUSH1 0xC4 CALLDATALOAD PUSH2 0x226E JUMP JUMPDEST PUSH2 0x26C DUP5 PUSH2 0x1CDF JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x668 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x695 JUMPI JUMPDEST PUSH2 0x639 JUMPI POP POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x60C JUMPI PUSH2 0x2EC SWAP2 PUSH1 0x40 MSTORE DUP6 PUSH2 0x23F6 JUMP JUMPDEST PUSH2 0x2F5 DUP5 PUSH2 0x22D4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 DUP1 PUSH1 0x20 DUP5 ADD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH2 0x387 DUP6 PUSH2 0x379 PUSH1 0x44 CALLDATALOAD PUSH32 0x0 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x1922 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND GAS CALL PUSH2 0x3AC PUSH2 0x23C7 JUMP JUMPDEST DUP2 PUSH2 0x57C JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x60 SWAP4 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 DUP5 DUP4 SWAP6 SWAP1 PUSH2 0x570 JUMPI JUMPDEST ISZERO PUSH2 0x4F3 JUMPI JUMPDEST POP DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x412 DUP2 PUSH2 0x1906 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP13 AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH1 0x84 CALLDATALOAD DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH1 0x40 MLOAD SWAP8 PUSH1 0x44 CALLDATALOAD DUP10 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x20 DUP11 ADD MSTORE AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x56A SWAP1 PUSH2 0x564 PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH32 0x0 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x55E DUP2 PUSH2 0x1906 JUMP JUMPDEST DUP13 PUSH2 0x23F6 JUMP JUMPDEST DUP11 PUSH2 0x23F6 JUMP JUMPDEST PUSH0 PUSH2 0x3FD JUMP JUMPDEST POP DUP3 DUP11 AND EXTCODESIZE ISZERO ISZERO PUSH2 0x3F7 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x5A5 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3B2 JUMP JUMPDEST DUP2 SWAP4 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 PUSH2 0x5FD PUSH1 0x20 PUSH1 0x60 SWAP8 ADD PUSH2 0x19A7 JUMP JUMPDEST SWAP5 POP SWAP6 POP SWAP4 POP PUSH2 0x589 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x668 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x280 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x741 PUSH2 0x1859 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH2 0x74F PUSH2 0x1B61 JUMP JUMPDEST PUSH2 0x758 DUP4 PUSH2 0x1CDF JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x668 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x81E JUMPI PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH1 0x80 DUP7 DUP7 DUP7 DUP7 PUSH2 0x79A DUP3 PUSH2 0x2209 JUMP JUMPDEST PUSH2 0x7A3 DUP4 PUSH2 0x226E JUMP JUMPDEST PUSH2 0x806 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x22D4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x862 PUSH2 0x1859 JUMP JUMPDEST POP PUSH2 0x86B PUSH2 0x187C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x608 JUMPI PUSH2 0x88D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x608 JUMPI PUSH2 0x95F SWAP3 PUSH2 0x8AF PUSH2 0x8B6 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST POP POP PUSH2 0x1B23 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA23 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x9F4 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xA15 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xA1C JUMPI JUMPDEST PUSH2 0xA0D DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1AF7 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x9EA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA03 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH2 0xBA0 PUSH1 0x20 SWAP2 PUSH2 0x1A92 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xBC9 PUSH2 0xBC4 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0x1CDF JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x668 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x95F PUSH2 0x8B6 PUSH2 0xBFC PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xC04 PUSH2 0x1A3A JUMP JUMPDEST POP PUSH2 0x1FFB JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xC23 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xC2B PUSH2 0x187C JUMP JUMPDEST SWAP1 PUSH2 0xC34 PUSH2 0x1B61 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP3 PUSH2 0xC9A JUMPI JUMPDEST PUSH2 0xC98 SWAP4 POP PUSH2 0x1DB2 JUMP JUMPDEST STOP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xCC8 JUMPI JUMPDEST DUP2 PUSH2 0xCB5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH2 0xC98 SWAP3 MLOAD SWAP2 PUSH2 0xC8E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCA8 JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xCE9 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xCF1 PUSH2 0x187C JUMP JUMPDEST PUSH2 0xCF9 PUSH2 0x1B61 JUMP JUMPDEST PUSH2 0xD02 DUP3 PUSH2 0x1CDF JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x668 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xD20 JUMPI PUSH2 0xC98 SWAP4 POP PUSH2 0x1DB2 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0xE7F JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0xE52 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0xE14 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xDBB JUMPI JUMPDEST POP PUSH2 0xDA7 SWAP3 POP SUB DUP4 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x95F PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1961 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0xDFC JUMPI POP POP PUSH2 0xDA7 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xD9A JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xDE5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xDA7 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xD9A SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xD76 JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x608 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x608 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0xEC7 DUP3 PUSH2 0x1945 JUMP JUMPDEST SWAP2 PUSH2 0xED5 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1922 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x608 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP5 ADD ADD MSTORE DUP2 MLOAD DUP3 ADD SWAP3 PUSH1 0x20 DUP5 ADD DUP4 DUP6 SUB SWAP4 PUSH2 0x1A0 DUP1 DUP7 SLT PUSH2 0x608 JUMPI PUSH2 0x180 DUP1 SWAP7 SLT PUSH2 0x608 JUMPI PUSH2 0xF2E PUSH1 0x40 MLOAD SWAP6 PUSH2 0xF29 DUP8 PUSH2 0x18CD JUMP JUMPDEST PUSH2 0x1986 JUMP JUMPDEST DUP6 MSTORE PUSH2 0xF3C PUSH1 0x40 DUP4 ADD PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP9 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP2 PUSH2 0xFC8 DUP4 DUP7 ADD PUSH2 0x19A7 JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP9 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP7 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x608 JUMPI ADD PUSH1 0x60 DUP2 DUP8 SUB SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1002 DUP8 PUSH2 0x18EA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x608 JUMPI DUP3 ADD DUP4 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x608 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x60C JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x103D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1922 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP7 DUP4 GT PUSH2 0x608 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1422 JUMPI POP POP POP DUP8 MSTORE PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x608 JUMPI PUSH1 0x60 SWAP1 DUP4 ADD DUP1 SWAP3 SUB SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1088 DUP3 PUSH2 0x18EA JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP8 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x608 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x10BD SWAP4 ADD ADD PUSH2 0x19B4 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x608 JUMPI PUSH2 0x10E0 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x19B4 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP3 PUSH2 0x13EC JUMPI JUMPDEST POP SWAP1 PUSH2 0x1208 PUSH2 0x11FA SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1922 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x13D3 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1305 DUP12 DUP12 DUP12 PUSH2 0x12A5 DUP7 PUSH2 0x1297 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1285 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x19FA JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1961 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x1317 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1961 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP1 PUSH2 0x1377 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x13CB JUMPI JUMPDEST DUP2 PUSH2 0x1391 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x134A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1384 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1231 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x141A JUMPI JUMPDEST DUP2 PUSH2 0x1407 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1208 PUSH2 0x1145 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x13FA JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1056 JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x144C PUSH2 0x1859 JUMP JUMPDEST POP PUSH2 0x1455 PUSH2 0x187C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x608 JUMPI PUSH2 0x1477 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x608 JUMPI PUSH2 0x1491 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x14C9 SWAP2 PUSH2 0x1B23 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1702 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x159F DUP2 PUSH2 0x1591 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1922 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x60C JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1687 JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x14DD JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x608 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1831 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1807 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x17DD JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x17B3 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x17AC JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x17A5 JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x179E JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x608 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x608 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x608 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x60C JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x608 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x19CB DUP3 PUSH2 0x1945 JUMP JUMPDEST SWAP3 PUSH2 0x19D9 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1922 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x608 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1A37 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1961 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1A47 DUP3 PUSH2 0x18CD JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1AF1 DUP2 PUSH2 0x18EA JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x608 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1B30 PUSH2 0x1A3A JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x608 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH2 0x1A37 SWAP1 PUSH2 0x1FFB JUMP JUMPDEST PUSH2 0x1B8D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1A92 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA23 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x1CBD JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP3 PUSH2 0x1C87 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1C5F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1CB6 JUMPI JUMPDEST PUSH2 0x1C9E DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH2 0x1CAF SWAP1 PUSH2 0x19A7 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1C56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1C94 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1CD8 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xA1C JUMPI PUSH2 0xA0D DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1C05 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x1DAA JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP4 PUSH2 0x1D76 JUMPI JUMPDEST POP DUP3 PUSH2 0x1D64 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x1D70 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1DA2 JUMPI JUMPDEST DUP2 PUSH2 0x1D92 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x1D57 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1D85 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP4 PUSH1 0x20 SWAP4 DUP5 DUP7 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP4 DUP5 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 PUSH32 0x0 AND DUP1 PUSH1 0x24 DUP12 ADD MSTORE PUSH0 PUSH1 0x44 DUP12 ADD MSTORE PUSH1 0x44 DUP11 MSTORE PUSH2 0x1E39 DUP11 PUSH2 0x1906 JUMP JUMPDEST PUSH0 DUP1 DUP9 DUP6 AND SWAP11 DUP13 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH2 0x1E4E PUSH2 0x23C7 JUMP JUMPDEST DUP2 PUSH2 0x1F68 JUMPI JUMPDEST POP SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP11 PUSH1 0x60 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 DUP5 PUSH2 0x1F13 SWAP6 SWAP1 PUSH2 0x1F5E JUMPI JUMPDEST ISZERO PUSH2 0x1F23 JUMPI JUMPDEST POP POP POP PUSH0 DUP9 DUP2 MSTORE PUSH1 0x1 DUP1 DUP6 MSTORE DUP9 DUP3 KECCAK256 DUP3 DUP2 SSTORE SWAP1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 ADD SSTORE DUP7 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 PUSH2 0x1F0E DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x11FA JUMP JUMPDEST PUSH2 0x23F6 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1F56 SWAP3 PUSH2 0x1F50 SWAP2 DUP12 MLOAD SWAP2 DUP9 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1F4A DUP2 PUSH2 0x1906 JUMP JUMPDEST DUP5 PUSH2 0x23F6 JUMP JUMPDEST DUP3 PUSH2 0x23F6 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1E93 JUMP JUMPDEST POP DUP11 EXTCODESIZE ISZERO ISZERO PUSH2 0x1E8D JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x1F9E JUMPI JUMPDEST POP PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP1 POP PUSH2 0x1E54 JUMP JUMPDEST DUP2 SWAP5 SWAP3 POP SWAP1 DUP7 SWAP6 SWAP4 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP2 DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP11 PUSH1 0x60 SWAP11 PUSH2 0x1FE8 DUP7 PUSH2 0x1F13 SWAP7 ADD PUSH2 0x19A7 JUMP JUMPDEST SWAP3 SWAP5 POP SWAP3 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 SWAP11 DUP2 SWAP13 POP PUSH2 0x1F75 JUMP JUMPDEST PUSH2 0x2003 PUSH2 0x1A3A JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x203A DUP5 PUSH2 0x1906 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x21AC JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x21A2 JUMPI PUSH0 SWAP6 PUSH2 0x2173 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x20F1 DUP11 PUSH2 0x18CD JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x219B JUMPI JUMPDEST PUSH2 0x218B DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x20BD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2181 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x2210 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2276 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x60C JUMPI DUP5 DUP5 MSTORE PUSH2 0x2342 DUP6 PUSH2 0x18EA JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x608 JUMPI PUSH2 0x239A PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x19FA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23BD JUMPI PUSH2 0x23B4 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x60C JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x23F1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x23D8 DUP3 PUSH2 0x1945 JUMP JUMPDEST SWAP2 PUSH2 0x23E6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1922 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x242C SWAP4 AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP7 GAS CALL PUSH2 0x2425 PUSH2 0x23C7 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x2490 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x246D JUMPI JUMPDEST POP POP PUSH2 0x2442 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH2 0x2488 SWAP2 ADD PUSH2 0x19A7 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2439 JUMP JUMPDEST SWAP1 PUSH2 0x24CD JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x24A5 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2520 JUMPI JUMPDEST PUSH2 0x24DE JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x24D6 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 0xFC 0xC2 CREATE2 DUP5 SIGNEXTEND 0x26 0x2C PUSH10 0xCB2940B8CBD701ACE30F ADDMOD SWAP4 SWAP2 MSTORE 0xBE 0xE 0xBE 0xEE SWAP14 0x4F MSTORE CALLDATACOPY POP PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1726:10434:63:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;922:4:45;1726:10434:63;1347:46:33;943:28:43;939:79;;1726:10434:63;1028:14:43;1726:10434:63;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;2127:17;;;2193:18;;;2717:30;;;;2757:28;;;;2795:18;;;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:17;1726:10434;;;;;2193:18;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;-1:-1:-1;1726:10434:63;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;-1:-1:-1;1726:10434:63;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;-1:-1:-1;1726:10434:63;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;1726:10434:63;-1:-1:-1;1726:10434:63;;;;;;;;;-1:-1:-1;;1726:10434:63;;;-1:-1:-1;;;;;1726:10434:63;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":6233,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_19030":{"entryPoint":6268,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":6567,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":6303,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":6580,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6903,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":6534,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":6497,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":6650,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":6714,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":6469,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":9159,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":6434,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19034":{"entryPoint":6349,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19035":{"entryPoint":6378,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19050":{"entryPoint":6406,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":7009,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":9206,"id":9934,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":7602,"id":13618,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":8814,"id":14109,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":8713,"id":14124,"parameterSlots":1,"returnSlots":0},"fun_createCowOrder":{"entryPoint":8916,"id":14154,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":6802,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getOrder":{"entryPoint":8187,"id":14023,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":7391,"id":14093,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":6947,"id":13808,"parameterSlots":2,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":9360,"id":10196,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":6845}],"6692":[{"length":32,"start":2486},{"length":32,"start":2810},{"length":32,"start":7123}],"13366":[{"length":32,"start":8502}],"13371":[{"length":32,"start":8389}],"13374":[{"length":32,"start":2730},{"length":32,"start":4373},{"length":32,"start":4891},{"length":32,"start":8940}],"13376":[{"length":32,"start":814},{"length":32,"start":1318},{"length":32,"start":2650},{"length":32,"start":7680}],"13378":[{"length":32,"start":2869},{"length":32,"start":8458}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a71461170a5750806314a2a784146114325780631626ba7e14610e8957806354fd4d5014610d4c57806360e092c614610cd057806368bce71214610c0a5780636eba2b1314610bdd5780636f9d75cd14610ba8578063851c1bb314610b585780638aebd34814610b1e5780638d928af814610ace57806393504c5214610a7e5780639b552cc214610a2e578063aaabadc514610963578063b8296fc414610849578063d83b06a4146107285763de557a32146100d7575f80fd5b346106085760e0600319360112610608576100f0611859565b6100f861187c565b9060643573ffffffffffffffffffffffffffffffffffffffff811681036106085760a4359073ffffffffffffffffffffffffffffffffffffffff8216820361060857610142611b61565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6107005760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216145f146102455760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b604435156106a257610258608435612209565b61026360c43561226e565b61026c84611cdf565b506004811015806106685781151580610695575b6106395750506040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260443560648201526064815260a081019080821067ffffffffffffffff83111761060c576102ec91604052856123f6565b6102f5846122d4565b604051905f80602084017f095ea7b3000000000000000000000000000000000000000000000000000000008152610387856103796044357f0000000000000000000000000000000000000000000000000000000000000000602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03601f198101875286611922565b8451908273ffffffffffffffffffffffffffffffffffffffff8a165af16103ac6123c7565b8161057c575b5073ffffffffffffffffffffffffffffffffffffffff806060937f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d9584839590610570575b156104f3575b508863ffffffff600360405161041281611906565b858516815260208101868c16815260408201906084358252878b8401968660c435168852165f5260016020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790558160405197604435895260843560208a0152166040880152169616941692a45f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61056a906105646040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820152857f00000000000000000000000000000000000000000000000000000000000000001660248201525f60448201526044815261055e81611906565b8c6123f6565b8a6123f6565b5f6103fd565b50828a163b15156103f7565b80518015925082156105a5575b505073ffffffffffffffffffffffffffffffffffffffff6103b2565b8193925090602091810103126106085773ffffffffffffffffffffffffffffffffffffffff8080927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d956105fd6020606097016119a7565b945095509350610589565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526106685760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610280565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461060857606060031936011261060857610741611859565b60443560243561074f611b61565b61075883611cdf565b906004811015610668576003810361081e577f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a60808686868661079a82612209565b6107a38361226e565b61080673ffffffffffffffffffffffffffffffffffffffff851694855f526001602052600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556122d4565b604051938452602084015260408301526060820152a1005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346106085760a060031936011261060857610862611859565b5061086b61187c565b5067ffffffffffffffff6064358181116106085761088d90369060040161189f565b6084929192359182116106085761095f926108af6108b693369060040161189f565b5050611b23565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610608575f600319360112610608576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610a23576020925f926109f4575b5060405191168152f35b610a15919250833d8511610a1c575b610a0d8183611922565b810190611af7565b90836109ea565b503d610a03565b6040513d5f823e3d90fd5b34610608575f60031936011261060857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610608575f60031936011261060857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610608575f60031936011261060857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610608575f6003193601126106085760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610608576020600319360112610608576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361060857610ba0602091611a92565b604051908152f35b3461060857602060031936011261060857610bc9610bc4611859565b611cdf565b506040516004821015610668576020918152f35b346106085760206003193601126106085761095f6108b6610bfc611859565b610c04611a3a565b50611ffb565b3461060857604060031936011261060857610c23611859565b610c2b61187c565b90610c34611b61565b604051917f70a0823100000000000000000000000000000000000000000000000000000000835230600484015260208360248173ffffffffffffffffffffffffffffffffffffffff86165afa918215610a23575f92610c9a575b610c989350611db2565b005b91506020833d602011610cc8575b81610cb560209383611922565b8101031261060857610c98925191610c8e565b3d9150610ca8565b3461060857604060031936011261060857610ce9611859565b610cf161187c565b610cf9611b61565b610d0282611cdf565b91909260048410156106685760038403610d2057610c989350611db2565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610608575f600319360112610608576040515f5f549060018260011c9160018416918215610e7f575b6020948585108414610e525785879486865291825f14610e14575050600114610dbb575b50610da792500383611922565b61095f604051928284938452830190611961565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310610dfc575050610da7935082010185610d9a565b80548389018501528794508693909201918101610de5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610da795151560051b8501019250879150610d9a9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610d76565b346106085760406003193601126106085767ffffffffffffffff602435818111610608573660238201121561060857806004013590610ec782611945565b91610ed56040519384611922565b8083526020830191366024838301011161060857815f92602460209301853784010152815182019260208401838503936101a08086126106085761018080961261060857610f2e60405195610f29876118cd565b611986565b8552610f3c60408301611986565b602086015260608201519573ffffffffffffffffffffffffffffffffffffffff9687811681036106085760408701526080830151606087015260a0830151608087015260c083015163ffffffff811681036106085760a087015260e083015160c0870152610100908184015160e088015261012091828501519088015261014091610fc88386016119a7565b90880152610160918285015190880152830151908601528101519083821161060857016060818703126106085760405195611002876118ea565b602082015184811161060857820183603f820112156106085760208101519085821161060c578160051b6040519261103d6020830185611922565b8352604060208401918301019186831161060857604001905b8282106114225750505087526040820151848111610608576060908301809203126106085760405190611088826118ea565b6020810151878116810361060857825260408101516020830152606081015185811161060857602085916110bd9301016119b4565b604082015260208701526060810151928311610608576110e092016020016119b4565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610a23575f926113ec575b50906112086111fa926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611922565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106113d3578560206113058b8b8b6112a5866112978d8d60406112858b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc093848883030160608901526119fa565b92015190848303016080850152611961565b03601f198101885287611922565b611317604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611961565b906003198483030160c4850152611961565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610a23575f90611377575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d6020116113cb575b8161139160209383611922565b8101031261060857517fffffffff00000000000000000000000000000000000000000000000000000000811681036106085760209061134a565b3d9150611384565b8251845289955060209384019390920191600101611231565b91506020823d60201161141a575b8161140760209383611922565b8101031261060857905190611208611145565b3d91506113fa565b8151815260209182019101611056565b34610608576102606003193601126106085761144c611859565b5061145561187c565b5067ffffffffffffffff60a4358181116106085761147790369060040161189f565b919060c4358281116106085761149190369060040161189f565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c360112610608576114c991611b23565b916101643592836080820180518211611702575b505060405161159f8161159160208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611922565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610608578752610104358181168091036106085760408401526101243590811680910361060857606083015261014435608083015260a08201526101843563ffffffff81168091036106085760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036106085761014086015261022435610160860152610244358186015284526101a084019687118488101761060c5786604052835190200361168757005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b5283856114dd565b3461060857602060031936011261060857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610608577f62af8dc200000000000000000000000000000000000000000000000000000000821461183157817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611807575b81156117dd575b81156117b3575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836117ac565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506117a5565b7fb8296fc4000000000000000000000000000000000000000000000000000000008114915061179e565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361060857565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361060857565b9181601f840112156106085782359167ffffffffffffffff8311610608576020838186019501011161060857565b610180810190811067ffffffffffffffff82111761060c57604052565b6060810190811067ffffffffffffffff82111761060c57604052565b6080810190811067ffffffffffffffff82111761060c57604052565b90601f601f19910116810190811067ffffffffffffffff82111761060c57604052565b67ffffffffffffffff811161060c57601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361060857565b5190811515820361060857565b81601f82011215610608578051906119cb82611945565b926119d96040519485611922565b8284526020838301011161060857815f9260208093018386015e8301015290565b9060606040611a379373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611961565b90565b60405190611a47826118cd565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152611af1816118ea565b51902090565b90816020910312610608575173ffffffffffffffffffffffffffffffffffffffff811681036106085790565b9081602091611b30611a3a565b5081010312610608573573ffffffffffffffffffffffffffffffffffffffff811680910361060857611a3790611ffb565b611b8d7fffffffff000000000000000000000000000000000000000000000000000000005f3516611a92565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a235784925f92611cbd575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610a23575f92611c87575b505015611c5f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311611cb6575b611c9e8183611922565b8101031261060857611caf906119a7565b5f80611c56565b503d611c94565b6064919250611cd890843d8611610a1c57610a0d8183611922565b9190611c05565b73ffffffffffffffffffffffffffffffffffffffff1690815f52600160205263ffffffff600360405f200154168015611daa576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610a23575f93611d76575b5082611d64575060029190565b4211611d705760019190565b60039190565b9092506020813d602011611da2575b81611d9260209383611922565b810103126106085751915f611d57565b3d9150611d85565b505f91508190565b919091604090815193602093848601947f095ea7b3000000000000000000000000000000000000000000000000000000009384875273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000168060248b01525f60448b015260448a52611e398a611906565b5f808885169a8c5190828d5af1611e4e6123c7565b81611f68575b50917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9a60609a9998979695949284611f139590611f5e575b15611f23575b5050505f8881526001808552888220828155908101829055600281018290556003015586517fa9059cbb000000000000000000000000000000000000000000000000000000008185015273ffffffffffffffffffffffffffffffffffffffff861660248201526044810185905290611f0e82606481016111fa565b6123f6565b84519586528501521690820152a1565b611f5692611f50918b51918883015260248201525f604482015260448152611f4a81611906565b846123f6565b826123f6565b5f8080611e93565b508a3b1515611e8d565b8051801592508215611f9e575b507f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9050611e54565b81949250908695939b9a999897969181010312610608577f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9a60609a611fe886611f1396016119a7565b929450929495969798999a819c50611f75565b612003611a3a565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600182526040805f20600382519261203a84611906565b848354168452846001840154169486850195865260028401549382860194855263ffffffff938491015416946060810195808752156121ac5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa9485156121a2575f95612173575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986120f18a6118cd565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161219b575b61218b8183611922565b810103126106085751935f6120bd565b503d612181565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b1561221057565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161227657565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff918085108386111761060c57848452612342856118ea565b3085525f60608201526080810152803b156106085761239a5f9491859285519687809481937f6bfae1ca00000000000000000000000000000000000000000000000000000000835289600484015260448301906119fa565b6001602483015203925af180156123bd576123b457505050565b821161060c5752565b82513d5f823e3d90fd5b3d156123f1573d906123d882611945565b916123e66040519384611922565b82523d5f602084013e565b606090565b5f8073ffffffffffffffffffffffffffffffffffffffff61242c93169360208151910182865af16124256123c7565b9083612490565b805190811515918261246d575b50506124425750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b819250906020918101031261060857602061248891016119a7565b155f80612439565b906124cd57508051156124a557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612520575b6124de575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156124d656fea2646970667358221220f9fcc2f5840b262c69cb2940b8cbd701ace30f08939152be0ebeee9d4f52375064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x170A JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1432 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0xE89 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xD4C JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xCD0 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC0A JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xBDD JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xBA8 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xB58 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xB1E JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xACE JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA7E JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xA2E JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x849 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x728 JUMPI PUSH4 0xDE557A32 EQ PUSH2 0xD7 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xF0 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xF8 PUSH2 0x187C JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI PUSH2 0x142 PUSH2 0x1B61 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x700 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH0 EQ PUSH2 0x245 JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x44 CALLDATALOAD ISZERO PUSH2 0x6A2 JUMPI PUSH2 0x258 PUSH1 0x84 CALLDATALOAD PUSH2 0x2209 JUMP JUMPDEST PUSH2 0x263 PUSH1 0xC4 CALLDATALOAD PUSH2 0x226E JUMP JUMPDEST PUSH2 0x26C DUP5 PUSH2 0x1CDF JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x668 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x695 JUMPI JUMPDEST PUSH2 0x639 JUMPI POP POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x60C JUMPI PUSH2 0x2EC SWAP2 PUSH1 0x40 MSTORE DUP6 PUSH2 0x23F6 JUMP JUMPDEST PUSH2 0x2F5 DUP5 PUSH2 0x22D4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 DUP1 PUSH1 0x20 DUP5 ADD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH2 0x387 DUP6 PUSH2 0x379 PUSH1 0x44 CALLDATALOAD PUSH32 0x0 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x1922 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND GAS CALL PUSH2 0x3AC PUSH2 0x23C7 JUMP JUMPDEST DUP2 PUSH2 0x57C JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x60 SWAP4 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 DUP5 DUP4 SWAP6 SWAP1 PUSH2 0x570 JUMPI JUMPDEST ISZERO PUSH2 0x4F3 JUMPI JUMPDEST POP DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x412 DUP2 PUSH2 0x1906 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP13 AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH1 0x84 CALLDATALOAD DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH1 0x40 MLOAD SWAP8 PUSH1 0x44 CALLDATALOAD DUP10 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x20 DUP11 ADD MSTORE AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x56A SWAP1 PUSH2 0x564 PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH32 0x0 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x55E DUP2 PUSH2 0x1906 JUMP JUMPDEST DUP13 PUSH2 0x23F6 JUMP JUMPDEST DUP11 PUSH2 0x23F6 JUMP JUMPDEST PUSH0 PUSH2 0x3FD JUMP JUMPDEST POP DUP3 DUP11 AND EXTCODESIZE ISZERO ISZERO PUSH2 0x3F7 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x5A5 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3B2 JUMP JUMPDEST DUP2 SWAP4 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 PUSH2 0x5FD PUSH1 0x20 PUSH1 0x60 SWAP8 ADD PUSH2 0x19A7 JUMP JUMPDEST SWAP5 POP SWAP6 POP SWAP4 POP PUSH2 0x589 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x668 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x280 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x741 PUSH2 0x1859 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH2 0x74F PUSH2 0x1B61 JUMP JUMPDEST PUSH2 0x758 DUP4 PUSH2 0x1CDF JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x668 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x81E JUMPI PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH1 0x80 DUP7 DUP7 DUP7 DUP7 PUSH2 0x79A DUP3 PUSH2 0x2209 JUMP JUMPDEST PUSH2 0x7A3 DUP4 PUSH2 0x226E JUMP JUMPDEST PUSH2 0x806 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x22D4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x862 PUSH2 0x1859 JUMP JUMPDEST POP PUSH2 0x86B PUSH2 0x187C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x608 JUMPI PUSH2 0x88D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x608 JUMPI PUSH2 0x95F SWAP3 PUSH2 0x8AF PUSH2 0x8B6 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST POP POP PUSH2 0x1B23 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA23 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x9F4 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xA15 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xA1C JUMPI JUMPDEST PUSH2 0xA0D DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1AF7 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x9EA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA03 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH2 0xBA0 PUSH1 0x20 SWAP2 PUSH2 0x1A92 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xBC9 PUSH2 0xBC4 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0x1CDF JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x668 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x95F PUSH2 0x8B6 PUSH2 0xBFC PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xC04 PUSH2 0x1A3A JUMP JUMPDEST POP PUSH2 0x1FFB JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xC23 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xC2B PUSH2 0x187C JUMP JUMPDEST SWAP1 PUSH2 0xC34 PUSH2 0x1B61 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP3 PUSH2 0xC9A JUMPI JUMPDEST PUSH2 0xC98 SWAP4 POP PUSH2 0x1DB2 JUMP JUMPDEST STOP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xCC8 JUMPI JUMPDEST DUP2 PUSH2 0xCB5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH2 0xC98 SWAP3 MLOAD SWAP2 PUSH2 0xC8E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCA8 JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0xCE9 PUSH2 0x1859 JUMP JUMPDEST PUSH2 0xCF1 PUSH2 0x187C JUMP JUMPDEST PUSH2 0xCF9 PUSH2 0x1B61 JUMP JUMPDEST PUSH2 0xD02 DUP3 PUSH2 0x1CDF JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x668 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xD20 JUMPI PUSH2 0xC98 SWAP4 POP PUSH2 0x1DB2 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0xE7F JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0xE52 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0xE14 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xDBB JUMPI JUMPDEST POP PUSH2 0xDA7 SWAP3 POP SUB DUP4 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x95F PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1961 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0xDFC JUMPI POP POP PUSH2 0xDA7 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xD9A JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xDE5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xDA7 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xD9A SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xD76 JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x608 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x608 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0xEC7 DUP3 PUSH2 0x1945 JUMP JUMPDEST SWAP2 PUSH2 0xED5 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1922 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x608 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP5 ADD ADD MSTORE DUP2 MLOAD DUP3 ADD SWAP3 PUSH1 0x20 DUP5 ADD DUP4 DUP6 SUB SWAP4 PUSH2 0x1A0 DUP1 DUP7 SLT PUSH2 0x608 JUMPI PUSH2 0x180 DUP1 SWAP7 SLT PUSH2 0x608 JUMPI PUSH2 0xF2E PUSH1 0x40 MLOAD SWAP6 PUSH2 0xF29 DUP8 PUSH2 0x18CD JUMP JUMPDEST PUSH2 0x1986 JUMP JUMPDEST DUP6 MSTORE PUSH2 0xF3C PUSH1 0x40 DUP4 ADD PUSH2 0x1986 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP9 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP9 ADD MSTORE PUSH2 0x140 SWAP2 PUSH2 0xFC8 DUP4 DUP7 ADD PUSH2 0x19A7 JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP9 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP7 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x608 JUMPI ADD PUSH1 0x60 DUP2 DUP8 SUB SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1002 DUP8 PUSH2 0x18EA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x608 JUMPI DUP3 ADD DUP4 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x608 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x60C JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x103D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1922 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP7 DUP4 GT PUSH2 0x608 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1422 JUMPI POP POP POP DUP8 MSTORE PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x608 JUMPI PUSH1 0x60 SWAP1 DUP4 ADD DUP1 SWAP3 SUB SLT PUSH2 0x608 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1088 DUP3 PUSH2 0x18EA JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP8 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x608 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x10BD SWAP4 ADD ADD PUSH2 0x19B4 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x608 JUMPI PUSH2 0x10E0 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x19B4 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP3 PUSH2 0x13EC JUMPI JUMPDEST POP SWAP1 PUSH2 0x1208 PUSH2 0x11FA SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1922 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x13D3 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1305 DUP12 DUP12 DUP12 PUSH2 0x12A5 DUP7 PUSH2 0x1297 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1285 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x19FA JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1961 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1922 JUMP JUMPDEST PUSH2 0x1317 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1961 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP1 PUSH2 0x1377 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x13CB JUMPI JUMPDEST DUP2 PUSH2 0x1391 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x134A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1384 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1231 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x141A JUMPI JUMPDEST DUP2 PUSH2 0x1407 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1208 PUSH2 0x1145 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x13FA JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1056 JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x144C PUSH2 0x1859 JUMP JUMPDEST POP PUSH2 0x1455 PUSH2 0x187C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x608 JUMPI PUSH2 0x1477 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x608 JUMPI PUSH2 0x1491 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x189F JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH2 0x14C9 SWAP2 PUSH2 0x1B23 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1702 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x159F DUP2 PUSH2 0x1591 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1922 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x60C JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1687 JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x14DD JUMP JUMPDEST CALLVALUE PUSH2 0x608 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x608 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x608 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1831 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1807 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x17DD JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x17B3 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x17AC JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x17A5 JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x179E JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x608 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x608 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x608 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x60C JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x60C JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x608 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x608 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x19CB DUP3 PUSH2 0x1945 JUMP JUMPDEST SWAP3 PUSH2 0x19D9 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1922 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x608 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1A37 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1961 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1A47 DUP3 PUSH2 0x18CD JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1AF1 DUP2 PUSH2 0x18EA JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x608 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x608 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1B30 PUSH2 0x1A3A JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x608 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x608 JUMPI PUSH2 0x1A37 SWAP1 PUSH2 0x1FFB JUMP JUMPDEST PUSH2 0x1B8D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1A92 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA23 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x1CBD JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP3 PUSH2 0x1C87 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1C5F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1CB6 JUMPI JUMPDEST PUSH2 0x1C9E DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH2 0x1CAF SWAP1 PUSH2 0x19A7 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1C56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1C94 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1CD8 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xA1C JUMPI PUSH2 0xA0D DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1C05 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x1DAA JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xA23 JUMPI PUSH0 SWAP4 PUSH2 0x1D76 JUMPI JUMPDEST POP DUP3 PUSH2 0x1D64 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x1D70 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1DA2 JUMPI JUMPDEST DUP2 PUSH2 0x1D92 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x1D57 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1D85 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP4 PUSH1 0x20 SWAP4 DUP5 DUP7 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP4 DUP5 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 PUSH32 0x0 AND DUP1 PUSH1 0x24 DUP12 ADD MSTORE PUSH0 PUSH1 0x44 DUP12 ADD MSTORE PUSH1 0x44 DUP11 MSTORE PUSH2 0x1E39 DUP11 PUSH2 0x1906 JUMP JUMPDEST PUSH0 DUP1 DUP9 DUP6 AND SWAP11 DUP13 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH2 0x1E4E PUSH2 0x23C7 JUMP JUMPDEST DUP2 PUSH2 0x1F68 JUMPI JUMPDEST POP SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP11 PUSH1 0x60 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 DUP5 PUSH2 0x1F13 SWAP6 SWAP1 PUSH2 0x1F5E JUMPI JUMPDEST ISZERO PUSH2 0x1F23 JUMPI JUMPDEST POP POP POP PUSH0 DUP9 DUP2 MSTORE PUSH1 0x1 DUP1 DUP6 MSTORE DUP9 DUP3 KECCAK256 DUP3 DUP2 SSTORE SWAP1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 ADD SSTORE DUP7 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 PUSH2 0x1F0E DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x11FA JUMP JUMPDEST PUSH2 0x23F6 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1F56 SWAP3 PUSH2 0x1F50 SWAP2 DUP12 MLOAD SWAP2 DUP9 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1F4A DUP2 PUSH2 0x1906 JUMP JUMPDEST DUP5 PUSH2 0x23F6 JUMP JUMPDEST DUP3 PUSH2 0x23F6 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1E93 JUMP JUMPDEST POP DUP11 EXTCODESIZE ISZERO ISZERO PUSH2 0x1E8D JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x1F9E JUMPI JUMPDEST POP PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP1 POP PUSH2 0x1E54 JUMP JUMPDEST DUP2 SWAP5 SWAP3 POP SWAP1 DUP7 SWAP6 SWAP4 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP2 DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP11 PUSH1 0x60 SWAP11 PUSH2 0x1FE8 DUP7 PUSH2 0x1F13 SWAP7 ADD PUSH2 0x19A7 JUMP JUMPDEST SWAP3 SWAP5 POP SWAP3 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 SWAP11 DUP2 SWAP13 POP PUSH2 0x1F75 JUMP JUMPDEST PUSH2 0x2003 PUSH2 0x1A3A JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x203A DUP5 PUSH2 0x1906 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x21AC JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x21A2 JUMPI PUSH0 SWAP6 PUSH2 0x2173 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x20F1 DUP11 PUSH2 0x18CD JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x219B JUMPI JUMPDEST PUSH2 0x218B DUP2 DUP4 PUSH2 0x1922 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x608 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x20BD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2181 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x2210 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2276 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x60C JUMPI DUP5 DUP5 MSTORE PUSH2 0x2342 DUP6 PUSH2 0x18EA JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x608 JUMPI PUSH2 0x239A PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x19FA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23BD JUMPI PUSH2 0x23B4 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x60C JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x23F1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x23D8 DUP3 PUSH2 0x1945 JUMP JUMPDEST SWAP2 PUSH2 0x23E6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1922 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x242C SWAP4 AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP7 GAS CALL PUSH2 0x2425 PUSH2 0x23C7 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x2490 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x246D JUMPI JUMPDEST POP POP PUSH2 0x2442 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x608 JUMPI PUSH1 0x20 PUSH2 0x2488 SWAP2 ADD PUSH2 0x19A7 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2439 JUMP JUMPDEST SWAP1 PUSH2 0x24CD JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x24A5 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2520 JUMPI JUMPDEST PUSH2 0x24DE JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x24D6 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 0xFC 0xC2 CREATE2 DUP5 SIGNEXTEND 0x26 0x2C PUSH10 0xCB2940B8CBD701ACE30F ADDMOD SWAP4 SWAP2 MSTORE 0xBE 0xE 0xBE 0xEE SWAP14 0x4F MSTORE CALLDATACOPY POP PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1726:10434:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;1726:10434:63;1424:26:45;;;1726:10434:63;;;;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1525:73:33;;:::i;:::-;551:66:40;2806:53:41;1316:93:40;;1726:10434:63;551:66:40;3051:52:41;1726:10434:63;;;;;;5942:23;5938:239;1726:10434;;;;;;5988:65;;;1726:10434;;5988:65;;1726:10434;;;;;;;;;;;;;;;;5988:65;5938:239;1726:10434;;6074:19;6070:107;;6206:23;1726:10434;;6206:23;:::i;:::-;6255:8;1726:10434;;6255:8;:::i;:::-;6300:35;;;:::i;:::-;1726:10434;;;;;;;;6349:33;;;:65;;;5938:239;6345:135;;1726:10434;;;;;;1829:53:55;;;6548:10:63;1726:10434;1829:53:55;;1726:10434:63;6568:4;1726:10434;;;;;;;;;;;1829:53:55;;1726:10434:63;;;;;;;;;;;;;1829:53:55;1726:10434:63;;;1829:53:55;;:::i;:::-;6627:8:63;;;:::i;:::-;1726:10434;;3411:47:55;1726:10434:63;3411:47:55;1726:10434:63;3411:47:55;;1726:10434:63;3411:47:55;;;1726:10434:63;3411:47:55;1726:10434:63;;6669:12;1726:10434;3411:47:55;;1726:10434:63;;;;;;;;;;;;;;;;;3411:47:55;;-1:-1:-1;;3411:47:55;;;;;;:::i;:::-;5615:25;;1726:10434:63;;;;;5615:25:55;;;;:::i;:::-;5657:69;;;5938:239:63;5657:103:55;1726:10434:63;5657:103:55;1726:10434:63;5657:103:55;6926:98:63;5657:103:55;;;;;;;5938:239:63;3473:45:55;3469:201;;5938:239:63;1726:10434;;;;;;;;;:::i;:::-;;;;;;;6729:181;;1726:10434;;;;;;6729:181;;1726:10434;;;;;6729:181;;;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6926:98;;1726:10434;551:66:40;3051:52:41;1726:10434:63;3469:201:55;3646:12;1726:10434:63;3561:43:55;1726:10434:63;;;;3561:43:55;;;6669:12:63;;1726:10434;;3561:43:55;;1726:10434:63;;;;;;;3561:43:55;;;;;:::i;:::-;;;:::i;:::-;3646:12;;:::i;:::-;3469:201;;;5657:103;1726:10434:63;;;;5730:26:55;:30;;5657:103;;:69;1726:10434:63;;5669:22:55;;;-1:-1:-1;5669:56:55;;;;5657:69;;;1726:10434:63;5657:69:55;;5669:56;5695:30;;;;;1726:10434:63;5695:30:55;;;1726:10434:63;;;;;5695:30:55;;;6926:98:63;5695:30:55;1726:10434:63;;;5695:30:55;;1726:10434:63;:::i;:::-;5669:56:55;;;;;;;;1726:10434:63;;;;;;;;;;;;;;6345:135;6437:32;1726:10434;6437:32;1726:10434;;;;;;6437:32;1726:10434;;;;;;;;;;6349:65;1726:10434;;;6396:18;6386:28;;;6349:65;;6070:107;1726:10434;;;6116:50;;;1726:10434;;6116:50;;1726:10434;;;;;;;;;;;6116:50;1316:93:40;1368:30;1726:10434:63;1368:30:40;1726:10434:63;;1368:30:40;1726:10434:63;;;;;-1:-1:-1;;1726:10434:63;;;;;;;:::i;:::-;;;;;1525:73:33;;:::i;:::-;3576:34:63;;;:::i;:::-;1726:10434;;;;;;;3635:18;3625:28;;3621:98;;3955:53;1726:10434;3748:12;;;;;;;:::i;:::-;3786:8;;;:::i;:::-;3931:7;1726:10434;;;;;;;;;;3635:18;1726:10434;;;3806:29;;;;1726:10434;3860:25;1726:10434;;;;;;;;;;3931:7;:::i;:::-;1726:10434;;;;;;;;;;;;;;;;;3955:53;1726:10434;3621:98;3676:32;1726:10434;3676:32;1726:10434;;;;3676:32;1726:10434;;;;;-1:-1:-1;;1726:10434:63;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;1424:26:45;;1726:10434:63;1424:26:45;1726:10434:63;;;1124:6:43;1726:10434:63;;1424:26:45;;;;;;;;;1726:10434:63;1424:26:45;;;1726:10434:63;;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1726:10434:63;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;2269:37;1726:10434;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;2218:45;1726:10434;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;1124:6:43;1726:10434:63;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;2312:32;1726:10434;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;3344:34;1726:10434;;:::i;:::-;3344:34;:::i;:::-;1726:10434;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;3169:18;1726:10434;;:::i;:::-;;;:::i;:::-;;3169:18;:::i;1726:10434::-;;;;;-1:-1:-1;;1726:10434:63;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;1726:10434:63;;4556:32;1726:10434;4556:32;;4582:4;1726:10434;4556:32;;1726:10434;;;;;;;;4556:32;;;;;;;1726:10434;4556:32;;;1726:10434;4556:32;;;;:::i;:::-;1726:10434;4556:32;;;1726:10434;4556:32;;1726:10434;4556:32;;;;;;1726:10434;4556:32;;;:::i;:::-;;;1726:10434;;;;4556:32;1726:10434;;4556:32;;;;;;-1:-1:-1;4556:32:63;;1726:10434;;;;;-1:-1:-1;;1726:10434:63;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;:::i;:::-;4185:34:63;;;:::i;:::-;1726:10434;;;;;;;;;4244:18;4234:28;;4230:98;;4370:6;;;;:::i;4230:98::-;4285:32;;1726:10434;4285:32;1726:10434;;;;4285:32;1726:10434;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;-1:-1:-1;1726:10434:63;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:92;;;1726:10434;8730:92;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9032:31;1726:10434;9032:31;;1726:10434;8898:13;1726:10434;8898:13;;;1726:10434;9032:31;;;;;;;1726:10434;9032:31;;;1726:10434;;;9109:17;;1726:10434;;;9109:17;;;1726:10434;9109:17;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9109:17;;-1:-1:-1;;9109:17:63;;;;;;:::i;:::-;1726:10434;;9144:19;;1726:10434;9144:19;;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9144:19;1726:10434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9144:19;-1:-1:-1;;9144:19:63;;;;;;:::i;:::-;1726:10434;;;8898:279;;;;;;;1726:10434;8898:279;;8958:4;1726:10434;8898:279;;1726:10434;8981:10;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1726:10434:63;;;;;;;;;:::i;:::-;8898:279;:13;;1726:10434;8898:279;;;;;;1726:10434;8898:279;;;1726:10434;;;;;;;;;;;8898:279;;1726:10434;8898:279;;1726:10434;8898:279;;;;;;1726:10434;8898:279;;;:::i;:::-;;;1726:10434;;;;;;;;;;;;;8898:279;;;;;;-1:-1:-1;8898:279:63;;1726:10434;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;9032:31;;;1726:10434;9032:31;;1726:10434;9032:31;;;;;;1726:10434;9032:31;;;:::i;:::-;;;1726:10434;;;;;;;9109:17;9032:31;;;;;-1:-1:-1;9032:31:63;;1726:10434;;;;;;;;;;;;;;;;;;-1:-1:-1;;1726:10434:63;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;7932:65;;;:::i;:::-;1726:10434;8012:16;1726:10434;8031:20;;1726:10434;8031:20;;1726:10434;;8012:39;;8008:109;;1726:10434;;;;;8141:22;;;1726:10434;8141:22;;;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8141:22;;-1:-1:-1;;8141:22:63;;;;;;:::i;:::-;1726:10434;8131:33;;1726:10434;;;;8178:18;;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8178:18;;1726:10434;;;;;;;;;;;;;;;;;8168:29;;8131:66;8127:177;;1726:10434;8127:177;1726:10434;8220:73;1726:10434;;8220:73;1726:10434;;8220:73;;;;;;1726:10434;;;;;;;;;8220:73;8008:109;1726:10434;8008:109;;;;1726:10434;;;;;-1:-1:-1;;1726:10434:63;;;;;;;;;;;;;;;;;9397:50;;9393:123;;9545:53;9560:38;1726:10434;9545:53;;:131;;;;;1726:10434;9545:188;;;;1726:10434;9545:244;;;;1726:10434;;;;;;;9545:244;9764:25;9749:40;;;9545:244;;;:188;9707:26;9692:41;;;-1:-1:-1;9545:188:63;;:131;9629:47;9614:62;;;-1:-1:-1;9545:131:63;;9393:123;9470:35;1726:10434;9470:35;1726:10434;;9470:35;1726:10434;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1726:10434:63;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1726:10434:63;;;;:::o;:::-;;-1:-1:-1;;1726:10434:63;;;;;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1726:10434:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1726:10434:63;;;2303:50:33;;;2320:22;;1726:10434:63;;;;;;;2303:50:33;;;;;;:::i;:::-;1726:10434:63;2293:61:33;;1931:430;:::o;1726:10434:63:-;;;;;;;;;;;;;;;;;;:::o;7303:295::-;;;1726:10434;7303:295;1726:10434;;:::i;:::-;;7520:34;;1726:10434;;;;;;;;;;;;;7573:18;;;:::i;1688:201:33:-;1762:20;1774:7;;;;1762:20;:::i;:::-;1726:10434:63;;;;1336:22:43;;;:6;;;:22;:6;;;1726:10434:63;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;1726:10434:63;;;;;1336:64:43;;;;;1726:10434:63;1336:64:43;;:22;:64;;1726:10434:63;1820:10:33;1726:10434:63;;;;1394:4:43;1726:10434:63;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:43;1774:7:33;1854:18;1336:64:43;;;;;;;;;;;;;;;;:::i;:::-;;;1726:10434:63;;;;;;;:::i;:::-;1336:64:43;;;;;;;;;:22;1726:10434:63;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;10849:593:63;1726:10434;;;;;;10986:7;1726:10434;;;11032:19;1726:10434;;;11032:19;1726:10434;;11066:13;;11062:79;;1726:10434;;;;;11169:32;;;;1726:10434;11169:32;;11195:4;11169:32;;;1726:10434;11169:32;;;;;;;1726:10434;11169:32;;;10849:593;-1:-1:-1;11215:12:63;;;11243:36;11251:18;11243:36;;:::o;11211:178::-;11300:15;:26;11296:93;;10986:7;11399:36;10849:593;:::o;11296:93::-;11032:19;11342:36;;:::o;11169:32::-;;;;1726:10434;11169:32;;1726:10434;11169:32;;;;;;1726:10434;11169:32;;;:::i;:::-;;;1726:10434;;;;;11169:32;;;;;;;-1:-1:-1;11169:32:63;;11062:79;-1:-1:-1;1726:10434:63;;-1:-1:-1;1726:10434:63;;11095:35::o;4602:284::-;;;;1726:10434;;;;3411:47:55;;;;;;1726:10434:63;;3411:47:55;;;;1726:10434:63;4714:12;;;1726:10434;3411:47:55;;;;1726:10434:63;4728:1;1726:10434;;;;;3411:47:55;;;;;:::i;:::-;4728:1:63;1726:10434;;;;5615:25:55;;;;;;;;;;:::i;:::-;5657:69;;;4602:284:63;5657:103:55;;4839:40:63;5657:103:55;1726:10434:63;5657:103:55;;;;;;;;;1412:43;5657:103;;;;4602:284:63;3473:45:55;3469:201;;4602:284:63;-1:-1:-1;;;4728:1:63;1726:10434;;;4747:7;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;1412:43:55;;;;1726:10434:63;;;3411:47:55;1412:43;;1726:10434:63;;;;;;;;1412:43:55;1726:10434:63;;;;1412:43:55;1726:10434:63;1412:43:55;;:::i;:::-;1726:10434:63;;;;;;;;;;;;;4839:40;4602:284::o;3469:201:55:-;3646:12;1726:10434:63;3561:43:55;1726:10434:63;;;3561:43:55;;;;;3411:47;3561:43;;1726:10434:63;4728:1;1726:10434;;;;;3561:43:55;;;;;:::i;:::-;;;:::i;:::-;3646:12;;:::i;:::-;3469:201;;;;;5657:103;5730:26;;;:30;;5657:103;;:69;1726:10434:63;;5669:22:55;;;-1:-1:-1;5669:56:55;;;;5657:69;-1:-1:-1;4839:40:63;;-1:-1:-1;5657:69:55;;5669:56;5695:30;;;;;;;;;;;;;;;;;1726:10434:63;;;;4839:40;5695:30:55;1726:10434:63;5695:30:55;1726:10434:63;5695:30:55;1412:43;5695:30;;1726:10434:63;:::i;:::-;5669:56:55;;;;;;;;;;;;;;;;10015:828:63;1726:10434;;:::i;:::-;;;;;;;;-1:-1:-1;1726:10434:63;;;10131:7;1726:10434;;;;-1:-1:-1;1726:10434:63;;;;;;;;:::i;:::-;;;;;;;;10131:7;1726:10434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10162:24;10158:99;;1726:10434;;;;;;;;;;10456:32;1726:10434;10456:32;;10482:4;10456:32;;;1726:10434;10456:32;;1726:10434;10456:32;;;;;;;;;-1:-1:-1;10456:32:63;;;10015:828;1726:10434;;;;;10760:13;;1726:10434;;;;;;;:::i;:::-;;;10286:550;;1726:10434;10286:550;;1726:10434;;10286:550;;1726:10434;;10286:550;;1726:10434;10286:550;;;1726:10434;10613:7;10286:550;;;1726:10434;-1:-1:-1;1726:10434:63;10286:550;;1726:10434;10674:9;10286:550;;;1726:10434;10131:7;10286:550;;;1726:10434;10286:550;;;;1726:10434;10286:550;;;1726:10434;10015:828;:::o;10456:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1726:10434;;;;;10456:32;;;;;;;;;;1726:10434;;;-1:-1:-1;1726:10434:63;;;;;10158:99;1726:10434;;;;10209:37;;;;;;;1726:10434;;;;;;;;;;;10209:37;11638:182;11715:17;11711:103;;11638:182::o;11711:103::-;1726:10434;;;11755:48;;;1726:10434;11755:48;;;1726:10434;;;;;;;;;;;11755:48;11448:184;11517:15;:26;11513:113;;11448:184::o;11513:113::-;1726:10434;;;11566:49;;;1726:10434;11566:49;;;1726:10434;;;;;;;;;;;11566:49;11826:332;1726:10434;11885:13;;1726:10434;;;;;;;;12089:19;;;1726:10434;12089:19;;;1726:10434;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12019:4;1726:10434;;12057:1;11919:204;;;1726:10434;11919:204;;;1726:10434;11885:266;;;;;1726:10434;12057:1;1726:10434;;;;;;11885:266;;;;;;1726:10434;11885:266;;;;;;1726:10434;;;;;;:::i;:::-;12137:4;1726:10434;;;;11885:266;;;;;;;;;;11826:332;;;:::o;11885:266::-;1726:10434;;;;;11826:332::o;11885:266::-;1726:10434;;;12057:1;1726:10434;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;1726:10434:63;;;;:::o;:::-;;;:::o;4059:629:55:-;2847:1:56;4059:629:55;1726:10434:63;3510:55:56;4059:629:55;1726:10434:63;3462:31:56;;;;;;;;;;;;:::i;:::-;3510:55;;;:::i;:::-;1726:10434:63;;4551:22:55;;;;:57;;;;4059:629;4547:135;;;;4059:629;:::o;4547:135::-;4631:40;2847:1:56;4631:40:55;;1726:10434:63;;2847:1:56;4631:40:55;4551:57;4578:30;;;;3462:31:56;4578:30:55;;;1726:10434:63;;;;3462:31:56;1726:10434:63;4578:30:55;;1726:10434:63;:::i;:::-;4577:31:55;4551:57;;;;4625:582:56;;4797:8;;-1:-1:-1;1726:10434:63;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;1726:10434:63;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;1726:10434:63;5121:24:56;;5066:1;5121:24;1726:10434:63;5121:24:56;1726:10434:63;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","getVault()":"8d928af8","isValidSignature(bytes32,bytes)":"1626ba7e","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with _data\"}},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns protocol fees using CowSwap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CowSwapFeeBurner.sol\":\"CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743\",\"dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0x3378a2ec05426b2a8a15e3d087f04dbc022d581115a8870d032e04aef8636eec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://87128d65a02e043f762eeff401d3a563a6bcd9bf87566936a690682a7acc8bad\",\"dweb:/ipfs/QmU5ZLUXW37ud3Xidjwb7TwkMuWyyuo9vAVwJdBvLU137H\"]}},\"version\":1}"}},"contracts/ERC4626CowSwapFeeBurner.sol":{"ERC4626CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IComposableCow","name":"composableCow","type":"address"},{"internalType":"address","name":"vaultRelayer","type":"address"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"string","name":"version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":817,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101806040523461032d57612b728038038061001a81610331565b928339810160c08282031261032d5781516001600160a01b039182821680830361032d5760209485810151908582169687830361032d57604082015197878916890361032d576060830151978816880361032d5760808301519560a084015160018060401b039485821161032d570194601f9282848801121561032d57865186811161030a57601f19976100b38287018a168801610331565b9482865287838301011161032d57815f92888093018388015e85010152306080521561031e5760a052805193841161030a575f54926001938481811c91168015610300575b828210146102ec578381116102a9575b50809285116001146102495750839450908392915f9461023e575b50501b915f199060031b1c1916175f555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560c0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960e0526101009485526101209384526101409182521561022f576101609182526040519261281b9485610357863960805185611d93015260a051858181610c5601528181610d8f0152611ea9015260c0518561238c015260e0518561231b015251848181610d3f015281816113f9015281816115f101526125420152518381816105380152818161070201528181610cef01526120aa015251828181610dca015261236001525181818161015c015261114a0152f35b63932c92a560e01b5f5260045ffd5b015192505f80610123565b9294849081165f8052845f20945f905b8883831061028f5750505010610277575b505050811b015f55610134565b01515f1960f88460031b161c191690555f808061026a565b858701518855909601959485019487935090810190610259565b5f8052815f208480880160051c8201928489106102e3575b0160051c019085905b8281106102d8575050610108565b5f81550185906102ca565b925081926102c1565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100f8565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761030a5760405256fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119e05750806314a2a784146117085780631626ba7e1461116e578063178ac96e1461111e57806354fd4d5014610fe157806360e092c614610f6557806368bce71214610e9f5780636eba2b1314610e725780636f9d75cd14610e3d578063851c1bb314610ded5780638aebd34814610db35780638d928af814610d6357806393504c5214610d135780639b552cc214610cc3578063aaabadc514610c03578063b8296fc414610ae9578063d83b06a4146109c85763de557a32146100e2575f80fd5b346107e85760e06003193601126107e8576100fb611b2f565b610103611b52565b9060643573ffffffffffffffffffffffffffffffffffffffff811681036107e85773ffffffffffffffffffffffffffffffffffffffff60a4351660a435036107e85773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036109a0577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109785760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260443560648201526064815260a081019080821067ffffffffffffffff83111761094b576102329160405284612683565b604051917f38d52e0f00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff88165afa9283156108e7575f936108f2575b50602073ffffffffffffffffffffffffffffffffffffffff60645f9660405197889384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af19384156108e7575f946108b3575b5073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8416145f146103c85750608435831061037c5750906103579173ffffffffffffffffffffffffffffffffffffffff60a435911661261d565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b73ffffffffffffffffffffffffffffffffffffffff91507f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560445260645ffd5b91929073ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216145f146104845760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b81156108555761049560843561245f565b6104a060c4356124c4565b6104bf73ffffffffffffffffffffffffffffffffffffffff8516611f8d565b5060048110158061081b5781151580610848575b6107ec5750506104f873ffffffffffffffffffffffffffffffffffffffff851661252a565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390529061057c82606481015b03601f198101845283611bf8565b5f808351602085018273ffffffffffffffffffffffffffffffffffffffff8a165af16105a661271d565b8161075c575b5073ffffffffffffffffffffffffffffffffffffffff806060937f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d9584839590610750575b156106cf575b508863ffffffff600360405161060c81611bdc565b8585168152602081018660a43516815260408201906084358252878b8401968660c435168852165f5260016020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082541617905560405196875260843560208801528160a435166040880152169616941692a4610357565b61074a906107426040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820152857f00000000000000000000000000000000000000000000000000000000000000001660248201525f60448201526044815261073a81611bdc565b858d16612683565b838b16612683565b5f6105f7565b50828a163b15156105f1565b8051801592508215610785575b505073ffffffffffffffffffffffffffffffffffffffff6105ac565b8193925090602091810103126107e85773ffffffffffffffffffffffffffffffffffffffff8080927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d956107dd602060609701611c7d565b945095509350610769565b5f80fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5261081b5760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f60028214156104d3565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b9093506020813d6020116108df575b816108cf60209383611bf8565b810103126107e85751925f6102f2565b3d91506108c2565b6040513d5f823e3d90fd5b9392506020843d602011610943575b8161090e60209383611bf8565b810103126107e857602073ffffffffffffffffffffffffffffffffffffffff60646109395f97611c5c565b9596505050610286565b3d9150610901565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107e85760606003193601126107e8576109e1611b2f565b6044356024356109ef611e37565b6109f883611f8d565b90600481101561081b5760038103610abe577f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a608086868686610a3a8261245f565b610a43836124c4565b610aa673ffffffffffffffffffffffffffffffffffffffff851694855f526001602052600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082541617905561252a565b604051938452602084015260408301526060820152a1005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346107e85760a06003193601126107e857610b02611b2f565b50610b0b611b52565b5067ffffffffffffffff6064358181116107e857610b2d903690600401611b75565b6084929192359182116107e857610bff92610b4f610b56933690600401611b75565b5050611df9565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b346107e8575f6003193601126107e8576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156108e7576020925f92610c94575b5060405191168152f35b610cb5919250833d8511610cbc575b610cad8183611bf8565b810190611dcd565b9083610c8a565b503d610ca3565b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e8575f6003193601126107e85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346107e85760206003193601126107e8576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036107e857610e35602091611d68565b604051908152f35b346107e85760206003193601126107e857610e5e610e59611b2f565b611f8d565b50604051600482101561081b576020918152f35b346107e85760206003193601126107e857610bff610b56610e91611b2f565b610e99611d10565b50612251565b346107e85760406003193601126107e857610eb8611b2f565b610ec0611b52565b90610ec9611e37565b604051917f70a0823100000000000000000000000000000000000000000000000000000000835230600484015260208360248173ffffffffffffffffffffffffffffffffffffffff86165afa9182156108e7575f92610f2f575b610f2d9350612060565b005b91506020833d602011610f5d575b81610f4a60209383611bf8565b810103126107e857610f2d925191610f23565b3d9150610f3d565b346107e85760406003193601126107e857610f7e611b2f565b610f86611b52565b610f8e611e37565b610f9782611f8d565b919092600484101561081b5760038403610fb557610f2d9350612060565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346107e8575f6003193601126107e8576040515f5f549060018260011c9160018416918215611114575b60209485851084146110e75785879486865291825f146110a9575050600114611050575b5061103c92500383611bf8565b610bff604051928284938452830190611c37565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061109157505061103c93508201018561102f565b8054838901850152879450869390920191810161107a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261103c95151560051b850101925087915061102f9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f169261100b565b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e85760406003193601126107e85760243567ffffffffffffffff8082116107e857366023830112156107e8578160040135916111ac83611c1b565b926111ba6040519485611bf8565b808452602084019136602483830101116107e857815f92602460209301853785010152825183019160208301938084036101a0908181126107e8576101808091126107e8576112146040519561120f87611ba3565b611c5c565b855261122260408401611c5c565b602086015261123360608401611c5c565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036107e85760a086015260e083015160c0860152610100908184015160e087015261012091828501519087015261014091611295838601611c7d565b9087015261016091828501519087015283015190850152810151908282116107e85701936060858503126107e857604051946112d086611bc0565b60208101518381116107e857810182603f820112156107e85760208101519084821161094b578160051b6040519261130b6020830185611bf8565b835260406020840191830101918583116107e857604001905b8282106116f857505050865260408101518381116107e8576060908201809603126107e85760405161135581611bc0565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036107e85782526040810151602083015260608101518581116107e857602085916113a1930101611c8a565b6040820152602087015260608101519283116107e8576113c49201602001611c8a565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108e7575f926116c2575b50906114de61056e926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116a9578560206115db8b8b8b61157b8661156d8d8d604061155b8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611cd0565b92015190848303016080850152611c37565b03601f198101885287611bf8565b6115ed604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611c37565b906003198483030160c4850152611c37565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108e7575f9061164d575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d6020116116a1575b8161166760209383611bf8565b810103126107e857517fffffffff00000000000000000000000000000000000000000000000000000000811681036107e857602090611620565b3d915061165a565b8251845289955060209384019390920191600101611507565b91506020823d6020116116f0575b816116dd60209383611bf8565b810103126107e8579051906114de611429565b3d91506116d0565b8151815260209182019101611324565b346107e8576102606003193601126107e857611722611b2f565b5061172b611b52565b5067ffffffffffffffff60a4358181116107e85761174d903690600401611b75565b919060c4358281116107e857611767903690600401611b75565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126107e85761179f91611df9565b9161016435928360808201805182116119d8575b50506040516118758161186760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611bf8565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff908181168091036107e8578752610104358181168091036107e8576040840152610124359081168091036107e857606083015261014435608083015260a08201526101843563ffffffff81168091036107e85760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036107e85761014086015261022435610160860152610244358186015284526101a084019687118488101761094b5786604052835190200361195d57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b5283856117b3565b346107e85760206003193601126107e857600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036107e8577f62af8dc2000000000000000000000000000000000000000000000000000000008214611b0757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611add575b8115611ab3575b8115611a89575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611a82565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611a7b565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611a74565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036107e857565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036107e857565b9181601f840112156107e85782359167ffffffffffffffff83116107e857602083818601950101116107e857565b610180810190811067ffffffffffffffff82111761094b57604052565b6060810190811067ffffffffffffffff82111761094b57604052565b6080810190811067ffffffffffffffff82111761094b57604052565b90601f601f19910116810190811067ffffffffffffffff82111761094b57604052565b67ffffffffffffffff811161094b57601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff821682036107e857565b519081151582036107e857565b81601f820112156107e857805190611ca182611c1b565b92611caf6040519485611bf8565b828452602083830101116107e857815f9260208093018386015e8301015290565b9060606040611d0d9373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611c37565b90565b60405190611d1d82611ba3565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152611dc781611bc0565b51902090565b908160209103126107e8575173ffffffffffffffffffffffffffffffffffffffff811681036107e85790565b9081602091611e06611d10565b50810103126107e8573573ffffffffffffffffffffffffffffffffffffffff81168091036107e857611d0d90612251565b611e637fffffffff000000000000000000000000000000000000000000000000000000005f3516611d68565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108e75784925f92611f6b575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156108e7575f92611f35575b5050156109a057565b90809250813d8311611f64575b611f4c8183611bf8565b810103126107e857611f5d90611c7d565b5f80611f2c565b503d611f42565b6064919250611f8690843d8611610cbc57610cad8183611bf8565b9190611edb565b73ffffffffffffffffffffffffffffffffffffffff1690815f52600160205263ffffffff600360405f200154168015612058576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108e7575f93612024575b5082612012575060029190565b421161201e5760019190565b60039190565b9092506020813d602011612050575b8161204060209383611bf8565b810103126107e85751915f612005565b3d9150612033565b505f91508190565b919060405190602092838301937f095ea7b30000000000000000000000000000000000000000000000000000000080865273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000168060248301525f6044830152604482526120e382611bdc565b5f80888b1699845190828c5af16120f861271d565b816121bc575b507f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9960609998979695946121649487948994806121b2575b15612176575b505050885f52600185525f600360408220828155826001820155826002820155015561261d565b604051948552840152166040820152a1565b6121aa926121a491604051918a83015260248201525f60448201526044815261219e81611bdc565b84612683565b82612683565b5f808061213d565b508b3b1515612137565b80518015925082156121f2575b507f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a90506120fe565b8192509086959a9998979691810103126107e8577f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9960609961216494879461223d888b9601611c7d565b945094509450949596979899819b506121c9565b612259611d10565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600182526040805f20600382519261229084611bdc565b848354168452846001840154169486850195865260028401549382860194855263ffffffff938491015416946060810195808752156124025781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa9485156123f8575f956123c9575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986123478a611ba3565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d83116123f1575b6123e18183611bf8565b810103126107e85751935f612313565b503d6123d7565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b1561246657565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b42116124cc57565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff918085108386111761094b5784845261259885611bc0565b3085525f60608201526080810152803b156107e8576125f05f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611cd0565b6001602483015203925af180156126135761260a57505050565b821161094b5752565b82513d5f823e3d90fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909216602483015260448201929092526126819161267c826064810161056e565b612683565b565b5f8073ffffffffffffffffffffffffffffffffffffffff6126b993169360208151910182865af16126b261271d565b908361274c565b80519081151591826126fa575b50506126cf5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126107e85760206127159101611c7d565b155f806126c6565b3d15612747573d9061272e82611c1b565b9161273c6040519384611bf8565b82523d5f602084013e565b606090565b90612789575080511561276157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806127dc575b61279a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561279256fea2646970667358221220f8be6216c1c6abcd66aa5fad43871768eee8ce8954cc8f3ca0dd7eefa023812564736f6c634300081b0033","opcodes":"PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x32D JUMPI PUSH2 0x2B72 DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x331 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0xC0 DUP3 DUP3 SUB SLT PUSH2 0x32D JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP1 DUP4 SUB PUSH2 0x32D JUMPI PUSH1 0x20 SWAP5 DUP6 DUP2 ADD MLOAD SWAP1 DUP6 DUP3 AND SWAP7 DUP8 DUP4 SUB PUSH2 0x32D JUMPI PUSH1 0x40 DUP3 ADD MLOAD SWAP8 DUP8 DUP10 AND DUP10 SUB PUSH2 0x32D JUMPI PUSH1 0x60 DUP4 ADD MLOAD SWAP8 DUP9 AND DUP9 SUB PUSH2 0x32D JUMPI PUSH1 0x80 DUP4 ADD MLOAD SWAP6 PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP5 DUP6 DUP3 GT PUSH2 0x32D JUMPI ADD SWAP5 PUSH1 0x1F SWAP3 DUP3 DUP5 DUP9 ADD SLT ISZERO PUSH2 0x32D JUMPI DUP7 MLOAD DUP7 DUP2 GT PUSH2 0x30A JUMPI PUSH1 0x1F NOT SWAP8 PUSH2 0xB3 DUP3 DUP8 ADD DUP11 AND DUP9 ADD PUSH2 0x331 JUMP JUMPDEST SWAP5 DUP3 DUP7 MSTORE DUP8 DUP4 DUP4 ADD ADD GT PUSH2 0x32D JUMPI DUP2 PUSH0 SWAP3 DUP9 DUP1 SWAP4 ADD DUP4 DUP9 ADD MCOPY DUP6 ADD ADD MSTORE ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x31E JUMPI PUSH1 0xA0 MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x30A JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x300 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x2EC JUMPI DUP4 DUP2 GT PUSH2 0x2A9 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x249 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x23E JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xC0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP5 DUP6 MSTORE PUSH2 0x120 SWAP4 DUP5 MSTORE PUSH2 0x140 SWAP2 DUP3 MSTORE ISZERO PUSH2 0x22F JUMPI PUSH2 0x160 SWAP2 DUP3 MSTORE PUSH1 0x40 MLOAD SWAP3 PUSH2 0x281B SWAP5 DUP6 PUSH2 0x357 DUP7 CODECOPY PUSH1 0x80 MLOAD DUP6 PUSH2 0x1D93 ADD MSTORE PUSH1 0xA0 MLOAD DUP6 DUP2 DUP2 PUSH2 0xC56 ADD MSTORE DUP2 DUP2 PUSH2 0xD8F ADD MSTORE PUSH2 0x1EA9 ADD MSTORE PUSH1 0xC0 MLOAD DUP6 PUSH2 0x238C ADD MSTORE PUSH1 0xE0 MLOAD DUP6 PUSH2 0x231B ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0xD3F ADD MSTORE DUP2 DUP2 PUSH2 0x13F9 ADD MSTORE DUP2 DUP2 PUSH2 0x15F1 ADD MSTORE PUSH2 0x2542 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x538 ADD MSTORE DUP2 DUP2 PUSH2 0x702 ADD MSTORE DUP2 DUP2 PUSH2 0xCEF ADD MSTORE PUSH2 0x20AA ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0xDCA ADD MSTORE PUSH2 0x2360 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x15C ADD MSTORE PUSH2 0x114A ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x123 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x28F JUMPI POP POP POP LT PUSH2 0x277 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x134 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x26A JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x259 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x2E3 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2D8 JUMPI POP POP PUSH2 0x108 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2CA JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2C1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xF8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x30A JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x19E0 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1708 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x116E JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x111E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xFE1 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xF65 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xE9F JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xE72 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xE3D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xDB3 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xD63 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xD13 JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xCC3 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xC03 JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9C8 JUMPI PUSH4 0xDE557A32 EQ PUSH2 0xE2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xFB PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0x103 PUSH2 0x1B52 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x7E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x9A0 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x978 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x94B JUMPI PUSH2 0x232 SWAP2 PUSH1 0x40 MSTORE DUP5 PUSH2 0x2683 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP4 PUSH2 0x8F2 JUMPI JUMPDEST POP PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x64 PUSH0 SWAP7 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP5 PUSH2 0x8B3 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EQ PUSH0 EQ PUSH2 0x3C8 JUMPI POP PUSH1 0x84 CALLDATALOAD DUP4 LT PUSH2 0x37C JUMPI POP SWAP1 PUSH2 0x357 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x261D JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH0 EQ PUSH2 0x484 JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x855 JUMPI PUSH2 0x495 PUSH1 0x84 CALLDATALOAD PUSH2 0x245F JUMP JUMPDEST PUSH2 0x4A0 PUSH1 0xC4 CALLDATALOAD PUSH2 0x24C4 JUMP JUMPDEST PUSH2 0x4BF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x1F8D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x81B JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x848 JUMPI JUMPDEST PUSH2 0x7EC JUMPI POP POP PUSH2 0x4F8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x252A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH2 0x57C DUP3 PUSH1 0x64 DUP2 ADD JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1BF8 JUMP JUMPDEST PUSH0 DUP1 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND GAS CALL PUSH2 0x5A6 PUSH2 0x271D JUMP JUMPDEST DUP2 PUSH2 0x75C JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x60 SWAP4 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 DUP5 DUP4 SWAP6 SWAP1 PUSH2 0x750 JUMPI JUMPDEST ISZERO PUSH2 0x6CF JUMPI JUMPDEST POP DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x60C DUP2 PUSH2 0x1BDC JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH1 0x84 CALLDATALOAD DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x357 JUMP JUMPDEST PUSH2 0x74A SWAP1 PUSH2 0x742 PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH32 0x0 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x73A DUP2 PUSH2 0x1BDC JUMP JUMPDEST DUP6 DUP14 AND PUSH2 0x2683 JUMP JUMPDEST DUP4 DUP12 AND PUSH2 0x2683 JUMP JUMPDEST PUSH0 PUSH2 0x5F7 JUMP JUMPDEST POP DUP3 DUP11 AND EXTCODESIZE ISZERO ISZERO PUSH2 0x5F1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x785 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5AC JUMP JUMPDEST DUP2 SWAP4 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 PUSH2 0x7DD PUSH1 0x20 PUSH1 0x60 SWAP8 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP5 POP SWAP6 POP SWAP4 POP PUSH2 0x769 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x81B JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8DF JUMPI JUMPDEST DUP2 PUSH2 0x8CF PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x2F2 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8C2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x943 JUMPI JUMPDEST DUP2 PUSH2 0x90E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x64 PUSH2 0x939 PUSH0 SWAP8 PUSH2 0x1C5C JUMP JUMPDEST SWAP6 SWAP7 POP POP POP PUSH2 0x286 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x901 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0x9E1 PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH2 0x9EF PUSH2 0x1E37 JUMP JUMPDEST PUSH2 0x9F8 DUP4 PUSH2 0x1F8D JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x81B JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xABE JUMPI PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH1 0x80 DUP7 DUP7 DUP7 DUP7 PUSH2 0xA3A DUP3 PUSH2 0x245F JUMP JUMPDEST PUSH2 0xA43 DUP4 PUSH2 0x24C4 JUMP JUMPDEST PUSH2 0xAA6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x252A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xB02 PUSH2 0x1B2F JUMP JUMPDEST POP PUSH2 0xB0B PUSH2 0x1B52 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x7E8 JUMPI PUSH2 0xB2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x7E8 JUMPI PUSH2 0xBFF SWAP3 PUSH2 0xB4F PUSH2 0xB56 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST POP POP PUSH2 0x1DF9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8E7 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xC94 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCB5 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xCBC JUMPI JUMPDEST PUSH2 0xCAD DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1DCD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xC8A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xCA3 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH2 0xE35 PUSH1 0x20 SWAP2 PUSH2 0x1D68 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xE5E PUSH2 0xE59 PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0x1F8D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x81B JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xBFF PUSH2 0xB56 PUSH2 0xE91 PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0xE99 PUSH2 0x1D10 JUMP JUMPDEST POP PUSH2 0x2251 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xEB8 PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0xEC0 PUSH2 0x1B52 JUMP JUMPDEST SWAP1 PUSH2 0xEC9 PUSH2 0x1E37 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP3 PUSH2 0xF2F JUMPI JUMPDEST PUSH2 0xF2D SWAP4 POP PUSH2 0x2060 JUMP JUMPDEST STOP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF5D JUMPI JUMPDEST DUP2 PUSH2 0xF4A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH2 0xF2D SWAP3 MLOAD SWAP2 PUSH2 0xF23 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF3D JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xF7E PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0xF86 PUSH2 0x1B52 JUMP JUMPDEST PUSH2 0xF8E PUSH2 0x1E37 JUMP JUMPDEST PUSH2 0xF97 DUP3 PUSH2 0x1F8D JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x81B JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xFB5 JUMPI PUSH2 0xF2D SWAP4 POP PUSH2 0x2060 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1114 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x10E7 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x10A9 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1050 JUMPI JUMPDEST POP PUSH2 0x103C SWAP3 POP SUB DUP4 PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0xBFF PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C37 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x1091 JUMPI POP POP PUSH2 0x103C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x102F JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x107A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x103C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x102F SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x100B JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x7E8 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x7E8 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x11AC DUP4 PUSH2 0x1C1B JUMP JUMPDEST SWAP3 PUSH2 0x11BA PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1BF8 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x7E8 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x7E8 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x7E8 JUMPI PUSH2 0x1214 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x120F DUP8 PUSH2 0x1BA3 JUMP JUMPDEST PUSH2 0x1C5C JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1222 PUSH1 0x40 DUP5 ADD PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1233 PUSH1 0x60 DUP5 ADD PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 PUSH2 0x1295 DUP4 DUP7 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x7E8 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x12D0 DUP7 PUSH2 0x1BC0 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x7E8 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x7E8 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x94B JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x130B PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1BF8 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x7E8 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x16F8 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x7E8 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD PUSH2 0x1355 DUP2 PUSH2 0x1BC0 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x7E8 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x13A1 SWAP4 ADD ADD PUSH2 0x1C8A JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x7E8 JUMPI PUSH2 0x13C4 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1C8A JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP3 PUSH2 0x16C2 JUMPI JUMPDEST POP SWAP1 PUSH2 0x14DE PUSH2 0x56E SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x16A9 JUMPI DUP6 PUSH1 0x20 PUSH2 0x15DB DUP12 DUP12 DUP12 PUSH2 0x157B DUP7 PUSH2 0x156D DUP14 DUP14 PUSH1 0x40 PUSH2 0x155B DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1CD0 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1C37 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0x15ED PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1C37 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1C37 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP1 PUSH2 0x164D JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x16A1 JUMPI JUMPDEST DUP2 PUSH2 0x1667 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1620 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x165A JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1507 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x16F0 JUMPI JUMPDEST DUP2 PUSH2 0x16DD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x14DE PUSH2 0x1429 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x16D0 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1324 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0x1722 PUSH2 0x1B2F JUMP JUMPDEST POP PUSH2 0x172B PUSH2 0x1B52 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x7E8 JUMPI PUSH2 0x174D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x7E8 JUMPI PUSH2 0x1767 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0x179F SWAP2 PUSH2 0x1DF9 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x19D8 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1875 DUP2 PUSH2 0x1867 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1BF8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x94B JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x195D JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x17B3 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x7E8 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1B07 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1ADD JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1AB3 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A89 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1A82 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1A7B JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1A74 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x7E8 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x7E8 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x7E8 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x94B JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x7E8 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1CA1 DUP3 PUSH2 0x1C1B JUMP JUMPDEST SWAP3 PUSH2 0x1CAF PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1BF8 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x7E8 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1D0D SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1C37 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1D1D DUP3 PUSH2 0x1BA3 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1DC7 DUP2 PUSH2 0x1BC0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x7E8 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1E06 PUSH2 0x1D10 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH2 0x1D0D SWAP1 PUSH2 0x2251 JUMP JUMPDEST PUSH2 0x1E63 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1D68 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8E7 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x1F6B JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP3 PUSH2 0x1F35 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x9A0 JUMPI JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1F64 JUMPI JUMPDEST PUSH2 0x1F4C DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH2 0x1F5D SWAP1 PUSH2 0x1C7D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1F2C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F42 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1F86 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xCBC JUMPI PUSH2 0xCAD DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1EDB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2058 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP4 PUSH2 0x2024 JUMPI JUMPDEST POP DUP3 PUSH2 0x2012 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x201E JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2050 JUMPI JUMPDEST DUP2 PUSH2 0x2040 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2005 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2033 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP4 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP1 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 PUSH32 0x0 AND DUP1 PUSH1 0x24 DUP4 ADD MSTORE PUSH0 PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x44 DUP3 MSTORE PUSH2 0x20E3 DUP3 PUSH2 0x1BDC JUMP JUMPDEST PUSH0 DUP1 DUP9 DUP12 AND SWAP10 DUP5 MLOAD SWAP1 DUP3 DUP13 GAS CALL PUSH2 0x20F8 PUSH2 0x271D JUMP JUMPDEST DUP2 PUSH2 0x21BC JUMPI JUMPDEST POP PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP10 PUSH1 0x60 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 PUSH2 0x2164 SWAP5 DUP8 SWAP5 DUP10 SWAP5 DUP1 PUSH2 0x21B2 JUMPI JUMPDEST ISZERO PUSH2 0x2176 JUMPI JUMPDEST POP POP POP DUP9 PUSH0 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x261D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x21AA SWAP3 PUSH2 0x21A4 SWAP2 PUSH1 0x40 MLOAD SWAP2 DUP11 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x219E DUP2 PUSH2 0x1BDC JUMP JUMPDEST DUP5 PUSH2 0x2683 JUMP JUMPDEST DUP3 PUSH2 0x2683 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x213D JUMP JUMPDEST POP DUP12 EXTCODESIZE ISZERO ISZERO PUSH2 0x2137 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x21F2 JUMPI JUMPDEST POP PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP1 POP PUSH2 0x20FE JUMP JUMPDEST DUP2 SWAP3 POP SWAP1 DUP7 SWAP6 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP2 DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP10 PUSH1 0x60 SWAP10 PUSH2 0x2164 SWAP5 DUP8 SWAP5 PUSH2 0x223D DUP9 DUP12 SWAP7 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 DUP2 SWAP12 POP PUSH2 0x21C9 JUMP JUMPDEST PUSH2 0x2259 PUSH2 0x1D10 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x2290 DUP5 PUSH2 0x1BDC JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x2402 JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x23F8 JUMPI PUSH0 SWAP6 PUSH2 0x23C9 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2347 DUP11 PUSH2 0x1BA3 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x23F1 JUMPI JUMPDEST PUSH2 0x23E1 DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x2313 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x23D7 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x2466 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x24CC JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x94B JUMPI DUP5 DUP5 MSTORE PUSH2 0x2598 DUP6 PUSH2 0x1BC0 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x7E8 JUMPI PUSH2 0x25F0 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1CD0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2613 JUMPI PUSH2 0x260A JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x94B JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x2681 SWAP2 PUSH2 0x267C DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x56E JUMP JUMPDEST PUSH2 0x2683 JUMP JUMPDEST JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x26B9 SWAP4 AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP7 GAS CALL PUSH2 0x26B2 PUSH2 0x271D JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x274C JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x26FA JUMPI JUMPDEST POP POP PUSH2 0x26CF JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH2 0x2715 SWAP2 ADD PUSH2 0x1C7D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x26C6 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x2747 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x272E DUP3 PUSH2 0x1C1B JUMP JUMPDEST SWAP2 PUSH2 0x273C PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2789 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2761 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x27DC JUMPI JUMPDEST PUSH2 0x279A JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2792 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 0xBE PUSH3 0x16C1C6 0xAB 0xCD PUSH7 0xAA5FAD43871768 0xEE 0xE8 0xCE DUP10 SLOAD 0xCC DUP16 EXTCODECOPY LOG0 0xDD PUSH31 0xEFA023812564736F6C634300081B0033000000000000000000000000000000 ","sourceMap":"1136:3391:64:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;922:4:45;1136:3391:64;1347:46:33;943:28:43;939:79;;1136:3391:64;1028:14:43;1136:3391:64;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;2127:17:63;1136:3391:64;2127:17:63;2193:18;;;2717:30;;;;2757:28;;;;2795:18;;;;1792:42:64;1788:107;;1905:40;;;;1136:3391;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2193:18:63;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:107;1857:27;;;-1:-1:-1;1857:27:64;;-1:-1:-1;1857:27:64;1136:3391;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;-1:-1:-1;1136:3391:64;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;-1:-1:-1;1136:3391:64;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;-1:-1:-1;1136:3391:64;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;1136:3391:64;-1:-1:-1;1136:3391:64;;;;;;;;;-1:-1:-1;;1136:3391:64;;;-1:-1:-1;;;;;1136:3391:64;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":6994,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_19969":{"entryPoint":6959,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":7293,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":7029,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7306,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":7629,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7260,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7223,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7376,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":7440,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7195,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":10013,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":7160,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19974":{"entryPoint":7075,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19975":{"entryPoint":7104,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19990":{"entryPoint":7132,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":7735,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":9859,"id":9934,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":8288,"id":13618,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":9412,"id":14109,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":9311,"id":14124,"parameterSlots":1,"returnSlots":0},"fun_createCowOrder":{"entryPoint":9514,"id":14154,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":7528,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getOrder":{"entryPoint":8785,"id":14023,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":8077,"id":14093,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":7673,"id":13808,"parameterSlots":2,"returnSlots":1},"fun_safeTransfer":{"entryPoint":9757,"id":9744,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":10060,"id":10196,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":7571}],"6692":[{"length":32,"start":3158},{"length":32,"start":3471},{"length":32,"start":7849}],"13366":[{"length":32,"start":9100}],"13371":[{"length":32,"start":8987}],"13374":[{"length":32,"start":3391},{"length":32,"start":5113},{"length":32,"start":5617},{"length":32,"start":9538}],"13376":[{"length":32,"start":1336},{"length":32,"start":1794},{"length":32,"start":3311},{"length":32,"start":8362}],"13378":[{"length":32,"start":3530},{"length":32,"start":9056}],"14185":[{"length":32,"start":348},{"length":32,"start":4426}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119e05750806314a2a784146117085780631626ba7e1461116e578063178ac96e1461111e57806354fd4d5014610fe157806360e092c614610f6557806368bce71214610e9f5780636eba2b1314610e725780636f9d75cd14610e3d578063851c1bb314610ded5780638aebd34814610db35780638d928af814610d6357806393504c5214610d135780639b552cc214610cc3578063aaabadc514610c03578063b8296fc414610ae9578063d83b06a4146109c85763de557a32146100e2575f80fd5b346107e85760e06003193601126107e8576100fb611b2f565b610103611b52565b9060643573ffffffffffffffffffffffffffffffffffffffff811681036107e85773ffffffffffffffffffffffffffffffffffffffff60a4351660a435036107e85773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036109a0577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109785760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260443560648201526064815260a081019080821067ffffffffffffffff83111761094b576102329160405284612683565b604051917f38d52e0f00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff88165afa9283156108e7575f936108f2575b50602073ffffffffffffffffffffffffffffffffffffffff60645f9660405197889384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af19384156108e7575f946108b3575b5073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8416145f146103c85750608435831061037c5750906103579173ffffffffffffffffffffffffffffffffffffffff60a435911661261d565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b73ffffffffffffffffffffffffffffffffffffffff91507f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560445260645ffd5b91929073ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216145f146104845760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b81156108555761049560843561245f565b6104a060c4356124c4565b6104bf73ffffffffffffffffffffffffffffffffffffffff8516611f8d565b5060048110158061081b5781151580610848575b6107ec5750506104f873ffffffffffffffffffffffffffffffffffffffff851661252a565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390529061057c82606481015b03601f198101845283611bf8565b5f808351602085018273ffffffffffffffffffffffffffffffffffffffff8a165af16105a661271d565b8161075c575b5073ffffffffffffffffffffffffffffffffffffffff806060937f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d9584839590610750575b156106cf575b508863ffffffff600360405161060c81611bdc565b8585168152602081018660a43516815260408201906084358252878b8401968660c435168852165f5260016020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082541617905560405196875260843560208801528160a435166040880152169616941692a4610357565b61074a906107426040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820152857f00000000000000000000000000000000000000000000000000000000000000001660248201525f60448201526044815261073a81611bdc565b858d16612683565b838b16612683565b5f6105f7565b50828a163b15156105f1565b8051801592508215610785575b505073ffffffffffffffffffffffffffffffffffffffff6105ac565b8193925090602091810103126107e85773ffffffffffffffffffffffffffffffffffffffff8080927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d956107dd602060609701611c7d565b945095509350610769565b5f80fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5261081b5760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f60028214156104d3565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b9093506020813d6020116108df575b816108cf60209383611bf8565b810103126107e85751925f6102f2565b3d91506108c2565b6040513d5f823e3d90fd5b9392506020843d602011610943575b8161090e60209383611bf8565b810103126107e857602073ffffffffffffffffffffffffffffffffffffffff60646109395f97611c5c565b9596505050610286565b3d9150610901565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107e85760606003193601126107e8576109e1611b2f565b6044356024356109ef611e37565b6109f883611f8d565b90600481101561081b5760038103610abe577f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a608086868686610a3a8261245f565b610a43836124c4565b610aa673ffffffffffffffffffffffffffffffffffffffff851694855f526001602052600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082541617905561252a565b604051938452602084015260408301526060820152a1005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346107e85760a06003193601126107e857610b02611b2f565b50610b0b611b52565b5067ffffffffffffffff6064358181116107e857610b2d903690600401611b75565b6084929192359182116107e857610bff92610b4f610b56933690600401611b75565b5050611df9565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b346107e8575f6003193601126107e8576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156108e7576020925f92610c94575b5060405191168152f35b610cb5919250833d8511610cbc575b610cad8183611bf8565b810190611dcd565b9083610c8a565b503d610ca3565b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e8575f6003193601126107e85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346107e85760206003193601126107e8576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036107e857610e35602091611d68565b604051908152f35b346107e85760206003193601126107e857610e5e610e59611b2f565b611f8d565b50604051600482101561081b576020918152f35b346107e85760206003193601126107e857610bff610b56610e91611b2f565b610e99611d10565b50612251565b346107e85760406003193601126107e857610eb8611b2f565b610ec0611b52565b90610ec9611e37565b604051917f70a0823100000000000000000000000000000000000000000000000000000000835230600484015260208360248173ffffffffffffffffffffffffffffffffffffffff86165afa9182156108e7575f92610f2f575b610f2d9350612060565b005b91506020833d602011610f5d575b81610f4a60209383611bf8565b810103126107e857610f2d925191610f23565b3d9150610f3d565b346107e85760406003193601126107e857610f7e611b2f565b610f86611b52565b610f8e611e37565b610f9782611f8d565b919092600484101561081b5760038403610fb557610f2d9350612060565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346107e8575f6003193601126107e8576040515f5f549060018260011c9160018416918215611114575b60209485851084146110e75785879486865291825f146110a9575050600114611050575b5061103c92500383611bf8565b610bff604051928284938452830190611c37565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061109157505061103c93508201018561102f565b8054838901850152879450869390920191810161107a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261103c95151560051b850101925087915061102f9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f169261100b565b346107e8575f6003193601126107e857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107e85760406003193601126107e85760243567ffffffffffffffff8082116107e857366023830112156107e8578160040135916111ac83611c1b565b926111ba6040519485611bf8565b808452602084019136602483830101116107e857815f92602460209301853785010152825183019160208301938084036101a0908181126107e8576101808091126107e8576112146040519561120f87611ba3565b611c5c565b855261122260408401611c5c565b602086015261123360608401611c5c565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036107e85760a086015260e083015160c0860152610100908184015160e087015261012091828501519087015261014091611295838601611c7d565b9087015261016091828501519087015283015190850152810151908282116107e85701936060858503126107e857604051946112d086611bc0565b60208101518381116107e857810182603f820112156107e85760208101519084821161094b578160051b6040519261130b6020830185611bf8565b835260406020840191830101918583116107e857604001905b8282106116f857505050865260408101518381116107e8576060908201809603126107e85760405161135581611bc0565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036107e85782526040810151602083015260608101518581116107e857602085916113a1930101611c8a565b6040820152602087015260608101519283116107e8576113c49201602001611c8a565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108e7575f926116c2575b50906114de61056e926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116a9578560206115db8b8b8b61157b8661156d8d8d604061155b8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611cd0565b92015190848303016080850152611c37565b03601f198101885287611bf8565b6115ed604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611c37565b906003198483030160c4850152611c37565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108e7575f9061164d575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d6020116116a1575b8161166760209383611bf8565b810103126107e857517fffffffff00000000000000000000000000000000000000000000000000000000811681036107e857602090611620565b3d915061165a565b8251845289955060209384019390920191600101611507565b91506020823d6020116116f0575b816116dd60209383611bf8565b810103126107e8579051906114de611429565b3d91506116d0565b8151815260209182019101611324565b346107e8576102606003193601126107e857611722611b2f565b5061172b611b52565b5067ffffffffffffffff60a4358181116107e85761174d903690600401611b75565b919060c4358281116107e857611767903690600401611b75565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126107e85761179f91611df9565b9161016435928360808201805182116119d8575b50506040516118758161186760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611bf8565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff908181168091036107e8578752610104358181168091036107e8576040840152610124359081168091036107e857606083015261014435608083015260a08201526101843563ffffffff81168091036107e85760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036107e85761014086015261022435610160860152610244358186015284526101a084019687118488101761094b5786604052835190200361195d57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b5283856117b3565b346107e85760206003193601126107e857600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036107e8577f62af8dc2000000000000000000000000000000000000000000000000000000008214611b0757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611add575b8115611ab3575b8115611a89575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611a82565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611a7b565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611a74565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036107e857565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036107e857565b9181601f840112156107e85782359167ffffffffffffffff83116107e857602083818601950101116107e857565b610180810190811067ffffffffffffffff82111761094b57604052565b6060810190811067ffffffffffffffff82111761094b57604052565b6080810190811067ffffffffffffffff82111761094b57604052565b90601f601f19910116810190811067ffffffffffffffff82111761094b57604052565b67ffffffffffffffff811161094b57601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff821682036107e857565b519081151582036107e857565b81601f820112156107e857805190611ca182611c1b565b92611caf6040519485611bf8565b828452602083830101116107e857815f9260208093018386015e8301015290565b9060606040611d0d9373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611c37565b90565b60405190611d1d82611ba3565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152611dc781611bc0565b51902090565b908160209103126107e8575173ffffffffffffffffffffffffffffffffffffffff811681036107e85790565b9081602091611e06611d10565b50810103126107e8573573ffffffffffffffffffffffffffffffffffffffff81168091036107e857611d0d90612251565b611e637fffffffff000000000000000000000000000000000000000000000000000000005f3516611d68565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108e75784925f92611f6b575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156108e7575f92611f35575b5050156109a057565b90809250813d8311611f64575b611f4c8183611bf8565b810103126107e857611f5d90611c7d565b5f80611f2c565b503d611f42565b6064919250611f8690843d8611610cbc57610cad8183611bf8565b9190611edb565b73ffffffffffffffffffffffffffffffffffffffff1690815f52600160205263ffffffff600360405f200154168015612058576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108e7575f93612024575b5082612012575060029190565b421161201e5760019190565b60039190565b9092506020813d602011612050575b8161204060209383611bf8565b810103126107e85751915f612005565b3d9150612033565b505f91508190565b919060405190602092838301937f095ea7b30000000000000000000000000000000000000000000000000000000080865273ffffffffffffffffffffffffffffffffffffffff94857f0000000000000000000000000000000000000000000000000000000000000000168060248301525f6044830152604482526120e382611bdc565b5f80888b1699845190828c5af16120f861271d565b816121bc575b507f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9960609998979695946121649487948994806121b2575b15612176575b505050885f52600185525f600360408220828155826001820155826002820155015561261d565b604051948552840152166040820152a1565b6121aa926121a491604051918a83015260248201525f60448201526044815261219e81611bdc565b84612683565b82612683565b5f808061213d565b508b3b1515612137565b80518015925082156121f2575b507f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a90506120fe565b8192509086959a9998979691810103126107e8577f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a9960609961216494879461223d888b9601611c7d565b945094509450949596979899819b506121c9565b612259611d10565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600182526040805f20600382519261229084611bdc565b848354168452846001840154169486850195865260028401549382860194855263ffffffff938491015416946060810195808752156124025781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa9485156123f8575f956123c9575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986123478a611ba3565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d83116123f1575b6123e18183611bf8565b810103126107e85751935f612313565b503d6123d7565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b1561246657565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b42116124cc57565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff918085108386111761094b5784845261259885611bc0565b3085525f60608201526080810152803b156107e8576125f05f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611cd0565b6001602483015203925af180156126135761260a57505050565b821161094b5752565b82513d5f823e3d90fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909216602483015260448201929092526126819161267c826064810161056e565b612683565b565b5f8073ffffffffffffffffffffffffffffffffffffffff6126b993169360208151910182865af16126b261271d565b908361274c565b80519081151591826126fa575b50506126cf5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126107e85760206127159101611c7d565b155f806126c6565b3d15612747573d9061272e82611c1b565b9161273c6040519384611bf8565b82523d5f602084013e565b606090565b90612789575080511561276157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806127dc575b61279a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561279256fea2646970667358221220f8be6216c1c6abcd66aa5fad43871768eee8ce8954cc8f3ca0dd7eefa023812564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x19E0 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1708 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x116E JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x111E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xFE1 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xF65 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xE9F JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xE72 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xE3D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xDB3 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xD63 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xD13 JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xCC3 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xC03 JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9C8 JUMPI PUSH4 0xDE557A32 EQ PUSH2 0xE2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xFB PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0x103 PUSH2 0x1B52 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x7E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x9A0 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x978 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x94B JUMPI PUSH2 0x232 SWAP2 PUSH1 0x40 MSTORE DUP5 PUSH2 0x2683 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP4 PUSH2 0x8F2 JUMPI JUMPDEST POP PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x64 PUSH0 SWAP7 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP5 PUSH2 0x8B3 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EQ PUSH0 EQ PUSH2 0x3C8 JUMPI POP PUSH1 0x84 CALLDATALOAD DUP4 LT PUSH2 0x37C JUMPI POP SWAP1 PUSH2 0x357 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x261D JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EQ PUSH0 EQ PUSH2 0x484 JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x855 JUMPI PUSH2 0x495 PUSH1 0x84 CALLDATALOAD PUSH2 0x245F JUMP JUMPDEST PUSH2 0x4A0 PUSH1 0xC4 CALLDATALOAD PUSH2 0x24C4 JUMP JUMPDEST PUSH2 0x4BF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x1F8D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x81B JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x848 JUMPI JUMPDEST PUSH2 0x7EC JUMPI POP POP PUSH2 0x4F8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x252A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH2 0x57C DUP3 PUSH1 0x64 DUP2 ADD JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1BF8 JUMP JUMPDEST PUSH0 DUP1 DUP4 MLOAD PUSH1 0x20 DUP6 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND GAS CALL PUSH2 0x5A6 PUSH2 0x271D JUMP JUMPDEST DUP2 PUSH2 0x75C JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x60 SWAP4 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 DUP5 DUP4 SWAP6 SWAP1 PUSH2 0x750 JUMPI JUMPDEST ISZERO PUSH2 0x6CF JUMPI JUMPDEST POP DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x60C DUP2 PUSH2 0x1BDC JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH1 0x84 CALLDATALOAD DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x357 JUMP JUMPDEST PUSH2 0x74A SWAP1 PUSH2 0x742 PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH32 0x0 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x73A DUP2 PUSH2 0x1BDC JUMP JUMPDEST DUP6 DUP14 AND PUSH2 0x2683 JUMP JUMPDEST DUP4 DUP12 AND PUSH2 0x2683 JUMP JUMPDEST PUSH0 PUSH2 0x5F7 JUMP JUMPDEST POP DUP3 DUP11 AND EXTCODESIZE ISZERO ISZERO PUSH2 0x5F1 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x785 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5AC JUMP JUMPDEST DUP2 SWAP4 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 PUSH2 0x7DD PUSH1 0x20 PUSH1 0x60 SWAP8 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP5 POP SWAP6 POP SWAP4 POP PUSH2 0x769 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x81B JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8DF JUMPI JUMPDEST DUP2 PUSH2 0x8CF PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x2F2 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8C2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x943 JUMPI JUMPDEST DUP2 PUSH2 0x90E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x64 PUSH2 0x939 PUSH0 SWAP8 PUSH2 0x1C5C JUMP JUMPDEST SWAP6 SWAP7 POP POP POP PUSH2 0x286 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x901 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0x9E1 PUSH2 0x1B2F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH2 0x9EF PUSH2 0x1E37 JUMP JUMPDEST PUSH2 0x9F8 DUP4 PUSH2 0x1F8D JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x81B JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xABE JUMPI PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH1 0x80 DUP7 DUP7 DUP7 DUP7 PUSH2 0xA3A DUP3 PUSH2 0x245F JUMP JUMPDEST PUSH2 0xA43 DUP4 PUSH2 0x24C4 JUMP JUMPDEST PUSH2 0xAA6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x252A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xB02 PUSH2 0x1B2F JUMP JUMPDEST POP PUSH2 0xB0B PUSH2 0x1B52 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x7E8 JUMPI PUSH2 0xB2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x7E8 JUMPI PUSH2 0xBFF SWAP3 PUSH2 0xB4F PUSH2 0xB56 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST POP POP PUSH2 0x1DF9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8E7 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xC94 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCB5 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xCBC JUMPI JUMPDEST PUSH2 0xCAD DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1DCD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xC8A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xCA3 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH2 0xE35 PUSH1 0x20 SWAP2 PUSH2 0x1D68 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xE5E PUSH2 0xE59 PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0x1F8D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x81B JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xBFF PUSH2 0xB56 PUSH2 0xE91 PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0xE99 PUSH2 0x1D10 JUMP JUMPDEST POP PUSH2 0x2251 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xEB8 PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0xEC0 PUSH2 0x1B52 JUMP JUMPDEST SWAP1 PUSH2 0xEC9 PUSH2 0x1E37 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP3 PUSH2 0xF2F JUMPI JUMPDEST PUSH2 0xF2D SWAP4 POP PUSH2 0x2060 JUMP JUMPDEST STOP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF5D JUMPI JUMPDEST DUP2 PUSH2 0xF4A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH2 0xF2D SWAP3 MLOAD SWAP2 PUSH2 0xF23 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF3D JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0xF7E PUSH2 0x1B2F JUMP JUMPDEST PUSH2 0xF86 PUSH2 0x1B52 JUMP JUMPDEST PUSH2 0xF8E PUSH2 0x1E37 JUMP JUMPDEST PUSH2 0xF97 DUP3 PUSH2 0x1F8D JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x81B JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xFB5 JUMPI PUSH2 0xF2D SWAP4 POP PUSH2 0x2060 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1114 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x10E7 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x10A9 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1050 JUMPI JUMPDEST POP PUSH2 0x103C SWAP3 POP SUB DUP4 PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0xBFF PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C37 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x1091 JUMPI POP POP PUSH2 0x103C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x102F JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x107A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x103C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x102F SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x100B JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x7E8 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x7E8 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x11AC DUP4 PUSH2 0x1C1B JUMP JUMPDEST SWAP3 PUSH2 0x11BA PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1BF8 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x7E8 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x7E8 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x7E8 JUMPI PUSH2 0x1214 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x120F DUP8 PUSH2 0x1BA3 JUMP JUMPDEST PUSH2 0x1C5C JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1222 PUSH1 0x40 DUP5 ADD PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1233 PUSH1 0x60 DUP5 ADD PUSH2 0x1C5C JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 PUSH2 0x1295 DUP4 DUP7 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x7E8 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x12D0 DUP7 PUSH2 0x1BC0 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x7E8 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x7E8 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x94B JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x130B PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1BF8 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x7E8 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x16F8 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x7E8 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x40 MLOAD PUSH2 0x1355 DUP2 PUSH2 0x1BC0 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x7E8 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x13A1 SWAP4 ADD ADD PUSH2 0x1C8A JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x7E8 JUMPI PUSH2 0x13C4 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1C8A JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP3 PUSH2 0x16C2 JUMPI JUMPDEST POP SWAP1 PUSH2 0x14DE PUSH2 0x56E SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x16A9 JUMPI DUP6 PUSH1 0x20 PUSH2 0x15DB DUP12 DUP12 DUP12 PUSH2 0x157B DUP7 PUSH2 0x156D DUP14 DUP14 PUSH1 0x40 PUSH2 0x155B DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1CD0 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1C37 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1BF8 JUMP JUMPDEST PUSH2 0x15ED PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1C37 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1C37 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP1 PUSH2 0x164D JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x16A1 JUMPI JUMPDEST DUP2 PUSH2 0x1667 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1620 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x165A JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1507 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x16F0 JUMPI JUMPDEST DUP2 PUSH2 0x16DD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x14DE PUSH2 0x1429 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x16D0 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1324 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0x1722 PUSH2 0x1B2F JUMP JUMPDEST POP PUSH2 0x172B PUSH2 0x1B52 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x7E8 JUMPI PUSH2 0x174D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x7E8 JUMPI PUSH2 0x1767 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1B75 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH2 0x179F SWAP2 PUSH2 0x1DF9 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x19D8 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1875 DUP2 PUSH2 0x1867 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1BF8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x94B JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x195D JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x17B3 JUMP JUMPDEST CALLVALUE PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7E8 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x7E8 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1B07 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1ADD JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1AB3 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A89 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1A82 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1A7B JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1A74 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x7E8 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x7E8 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x7E8 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x94B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x94B JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x7E8 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x7E8 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1CA1 DUP3 PUSH2 0x1C1B JUMP JUMPDEST SWAP3 PUSH2 0x1CAF PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1BF8 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x7E8 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1D0D SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1C37 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1D1D DUP3 PUSH2 0x1BA3 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1DC7 DUP2 PUSH2 0x1BC0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x7E8 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7E8 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1E06 PUSH2 0x1D10 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7E8 JUMPI PUSH2 0x1D0D SWAP1 PUSH2 0x2251 JUMP JUMPDEST PUSH2 0x1E63 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1D68 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8E7 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x1F6B JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP3 PUSH2 0x1F35 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x9A0 JUMPI JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1F64 JUMPI JUMPDEST PUSH2 0x1F4C DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH2 0x1F5D SWAP1 PUSH2 0x1C7D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1F2C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F42 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1F86 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xCBC JUMPI PUSH2 0xCAD DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1EDB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2058 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8E7 JUMPI PUSH0 SWAP4 PUSH2 0x2024 JUMPI JUMPDEST POP DUP3 PUSH2 0x2012 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x201E JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2050 JUMPI JUMPDEST DUP2 PUSH2 0x2040 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2005 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2033 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP4 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP1 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 PUSH32 0x0 AND DUP1 PUSH1 0x24 DUP4 ADD MSTORE PUSH0 PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x44 DUP3 MSTORE PUSH2 0x20E3 DUP3 PUSH2 0x1BDC JUMP JUMPDEST PUSH0 DUP1 DUP9 DUP12 AND SWAP10 DUP5 MLOAD SWAP1 DUP3 DUP13 GAS CALL PUSH2 0x20F8 PUSH2 0x271D JUMP JUMPDEST DUP2 PUSH2 0x21BC JUMPI JUMPDEST POP PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP10 PUSH1 0x60 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 PUSH2 0x2164 SWAP5 DUP8 SWAP5 DUP10 SWAP5 DUP1 PUSH2 0x21B2 JUMPI JUMPDEST ISZERO PUSH2 0x2176 JUMPI JUMPDEST POP POP POP DUP9 PUSH0 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x261D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x21AA SWAP3 PUSH2 0x21A4 SWAP2 PUSH1 0x40 MLOAD SWAP2 DUP11 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x219E DUP2 PUSH2 0x1BDC JUMP JUMPDEST DUP5 PUSH2 0x2683 JUMP JUMPDEST DUP3 PUSH2 0x2683 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x213D JUMP JUMPDEST POP DUP12 EXTCODESIZE ISZERO ISZERO PUSH2 0x2137 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x21F2 JUMPI JUMPDEST POP PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP1 POP PUSH2 0x20FE JUMP JUMPDEST DUP2 SWAP3 POP SWAP1 DUP7 SWAP6 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP2 DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP10 PUSH1 0x60 SWAP10 PUSH2 0x2164 SWAP5 DUP8 SWAP5 PUSH2 0x223D DUP9 DUP12 SWAP7 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 DUP2 SWAP12 POP PUSH2 0x21C9 JUMP JUMPDEST PUSH2 0x2259 PUSH2 0x1D10 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x2290 DUP5 PUSH2 0x1BDC JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x2402 JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x23F8 JUMPI PUSH0 SWAP6 PUSH2 0x23C9 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2347 DUP11 PUSH2 0x1BA3 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x23F1 JUMPI JUMPDEST PUSH2 0x23E1 DUP2 DUP4 PUSH2 0x1BF8 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x2313 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x23D7 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST ISZERO PUSH2 0x2466 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x24CC JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x94B JUMPI DUP5 DUP5 MSTORE PUSH2 0x2598 DUP6 PUSH2 0x1BC0 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x7E8 JUMPI PUSH2 0x25F0 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1CD0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2613 JUMPI PUSH2 0x260A JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x94B JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x2681 SWAP2 PUSH2 0x267C DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x56E JUMP JUMPDEST PUSH2 0x2683 JUMP JUMPDEST JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x26B9 SWAP4 AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP7 GAS CALL PUSH2 0x26B2 PUSH2 0x271D JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x274C JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x26FA JUMPI JUMPDEST POP POP PUSH2 0x26CF JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x7E8 JUMPI PUSH1 0x20 PUSH2 0x2715 SWAP2 ADD PUSH2 0x1C7D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x26C6 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x2747 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x272E DUP3 PUSH2 0x1C1B JUMP JUMPDEST SWAP2 PUSH2 0x273C PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1BF8 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2789 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2761 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x27DC JUMPI JUMPDEST PUSH2 0x279A JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2792 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF8 0xBE PUSH3 0x16C1C6 0xAB 0xCD PUSH7 0xAA5FAD43871768 0xEE 0xE8 0xCE DUP10 SLOAD 0xCC DUP16 EXTCODECOPY LOG0 0xDD PUSH31 0xEFA023812564736F6C634300081B0033000000000000000000000000000000 ","sourceMap":"1136:3391:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;1136:3391:64;1424:26:45;;;1136:3391:64;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1400:18;1136:3391;1378:10;:41;1374:97;;551:66:40;2806:53:41;1316:93:40;;1136:3391:64;551:66:40;3051:52:41;1136:3391:64;;;1829:53:55;;;;1378:10:64;1829:53:55;;;1136:3391:64;3267:4;1136:3391;;;;;;;;;;;1829:53:55;;1136:3391:64;;;;;;;;;;;;;1829:53:55;1136:3391:64;;;1829:53:55;;:::i;:::-;1136:3391:64;;3462:20;1136:3391;3462:20;;1829:53:55;1136:3391:64;;;;;;3462:20;;;;;;;1136:3391;3462:20;;;1136:3391;;1829:53:55;1136:3391:64;;;;;;3517:72;;;;;1136:3391;3517:72;;1136:3391;;;3517:72;;1136:3391;3267:4;1829:53:55;1136:3391:64;;;3267:4;1136:3391;;;;;3517:72;;;;;;;1136:3391;3517:72;;;1136:3391;;;;;;;;3823:23;3819:700;1136:3391;;;;;;3976:47;;3972:171;;1136:3391;;4190:21;1136:3391;;;;;;4190:21;:::i;:::-;1136:3391;551:66:40;3051:52:41;1136:3391:64;3972:171;1136:3391;4050:78;;;1136:3391;4050:78;1136:3391;;;1829:53:55;1136:3391:64;;;;;;;4050:78;3819:700;1136:3391;;;;;;;;;5942:23:63;5938:239;1136:3391:64;;;;;;5988:65:63;;;1829:53:55;1136:3391:64;5988:65:63;;1136:3391:64;;1829:53:55;1136:3391:64;;;;;;;;;;;;;5988:65:63;5938:239;6074:19;;6070:107;;6206:23;1136:3391:64;;6206:23:63;:::i;:::-;6255:8;1136:3391:64;;6255:8:63;:::i;:::-;6300:35;1136:3391:64;;;6300:35:63;:::i;:::-;1136:3391:64;;;;;;;;6349:33:63;;;:65;;;5938:239;6345:135;;1136:3391:64;;6627:8:63;1136:3391:64;;;6627:8:63;:::i;:::-;1136:3391:64;;;1829:53:55;3411:47;;;1136:3391:64;6669:12:63;1136:3391:64;1829:53:55;3411:47;;1136:3391:64;;;;;;;;3411:47:55;1136:3391:64;;;;3411:47:55;;-1:-1:-1;;3411:47:55;;;;;;:::i;:::-;1136:3391:64;5615:25:55;;;1829:53;3411:47;;1136:3391:64;;;;5615:25:55;;;;:::i;:::-;5657:69;;;5938:239:63;5657:103:55;1136:3391:64;5657:103:55;1136:3391:64;5657:103:55;6926:98:63;5657:103:55;;;;;;;5938:239:63;3473:45:55;3469:201;;5938:239:63;1136:3391:64;;;;;;;;;:::i;:::-;;;;;;1829:53:55;6729:181:63;;1136:3391:64;;;;;;;6729:181:63;;1136:3391:64;;;;;6729:181:63;;;;1136:3391:64;;;;;;;;;;;1829:53:55;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:53:55;1136:3391:64;;;;;;;;;;;;;;;;6926:98:63;;3819:700:64;;3469:201:55;3646:12;1136:3391:64;3561:43:55;1136:3391:64;;;1829:53:55;3561:43;;;6669:12:63;;1136:3391:64;1829:53:55;3561:43;;1136:3391:64;;;;;;;3561:43:55;;;;;:::i;:::-;1136:3391:64;;;3561:43:55;:::i;:::-;1136:3391:64;;;3646:12:55;:::i;:::-;3469:201;;;5657:103;1136:3391:64;;;;5730:26:55;:30;;5657:103;;:69;1136:3391:64;;5669:22:55;;;-1:-1:-1;5669:56:55;;;;5657:69;;;1136:3391:64;5657:69:55;;5669:56;5695:30;;;;;1829:53;5695:30;;;1136:3391:64;;;;;5695:30:55;;;6926:98:63;5695:30:55;1136:3391:64;1829:53:55;1136:3391:64;5695:30:55;;1136:3391:64;:::i;:::-;5669:56:55;;;;;;;;1136:3391:64;;;;6345:135:63;6437:32;1136:3391:64;6437:32:63;1136:3391:64;;;;1829:53:55;1136:3391:64;6437:32:63;1136:3391:64;;;;;;;1829:53:55;1136:3391:64;;6349:65:63;1136:3391:64;;;6396:18:63;6386:28;;;6349:65;;6070:107;1136:3391:64;;;6116:50:63;;;1829:53:55;1136:3391:64;6116:50:63;;1136:3391:64;;1829:53:55;1136:3391:64;;;;;;;;6116:50:63;3517:72:64;;;;1829:53:55;3517:72:64;;1829:53:55;3517:72:64;;;;;;1829:53:55;3517:72:64;;;:::i;:::-;;;1136:3391;;;;;3517:72;;;;;;;-1:-1:-1;3517:72:64;;;1136:3391;;;;;;;;;3462:20;;;;1829:53:55;3462:20:64;;1829:53:55;3462:20:64;;;;;;1829:53:55;3462:20:64;;;:::i;:::-;;;1136:3391;;;;1829:53:55;1136:3391:64;;;;;;:::i;:::-;3462:20;;;;;;;;;;-1:-1:-1;3462:20:64;;1136:3391;;;;;;;1829:53:55;1136:3391:64;;1316:93:40;1368:30;1136:3391:64;1368:30:40;1136:3391:64;;1368:30:40;1374:97:64;1442:18;1136:3391;1442:18;1136:3391;;1442:18;1136:3391;;;;;-1:-1:-1;;1136:3391:64;;;;;;;:::i;:::-;;;;;1525:73:33;;:::i;:::-;3576:34:63;;;:::i;:::-;1136:3391:64;;;;;;;3635:18:63;3625:28;;3621:98;;3955:53;1136:3391:64;3748:12:63;;;;;;;:::i;:::-;3786:8;;;:::i;:::-;3931:7;1136:3391:64;;;;;;;;;;3635:18:63;1136:3391:64;;;3806:29:63;;;;1136:3391:64;3860:25:63;1136:3391:64;;;;;;;;;;3931:7:63;:::i;:::-;1136:3391:64;;;;;;;;;;;;;;;;;3955:53:63;1136:3391:64;3621:98:63;3676:32;1136:3391:64;3676:32:63;1136:3391:64;;;;3676:32:63;1136:3391:64;;;;;-1:-1:-1;;1136:3391:64;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;1424:26:45;;1136:3391:64;1424:26:45;1136:3391:64;;;1124:6:43;1136:3391:64;;1424:26:45;;;;;;;;;1136:3391:64;1424:26:45;;;1136:3391:64;;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1136:3391:64;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;2269:37:63;1136:3391:64;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;2218:45:63;1136:3391:64;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;1124:6:43;1136:3391:64;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;2312:32:63;1136:3391:64;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;3344:34:63;1136:3391:64;;:::i;:::-;3344:34:63;:::i;:::-;1136:3391:64;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;3169:18:63;1136:3391:64;;:::i;:::-;;;:::i;:::-;;3169:18:63;:::i;1136:3391:64:-;;;;;-1:-1:-1;;1136:3391:64;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;1136:3391:64;;4556:32:63;1136:3391:64;4556:32:63;;4582:4;1136:3391:64;4556:32:63;;1136:3391:64;;;;;;;;4556:32:63;;;;;;;1136:3391:64;4556:32:63;;;1136:3391:64;4556:32:63;;;;:::i;:::-;1136:3391:64;4556:32:63;;;1136:3391:64;4556:32:63;;1136:3391:64;4556:32:63;;;;;;1136:3391:64;4556:32:63;;;:::i;:::-;;;1136:3391:64;;;;4556:32:63;1136:3391:64;;4556:32:63;;;;;;-1:-1:-1;4556:32:63;;1136:3391:64;;;;;-1:-1:-1;;1136:3391:64;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;:::i;:::-;4185:34:63;;;:::i;:::-;1136:3391:64;;;;;;;;;4244:18:63;4234:28;;4230:98;;4370:6;;;;:::i;4230:98::-;4285:32;;1136:3391:64;4285:32:63;1136:3391:64;;;;4285:32:63;1136:3391:64;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;-1:-1:-1;1136:3391:64;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;1268:55;1136:3391;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:92:63;;;1136:3391:64;8730:92:63;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9032:31:63;1136:3391:64;9032:31:63;;1136:3391:64;8898:13:63;1136:3391:64;8898:13:63;;;1136:3391:64;9032:31:63;;;;;;;1136:3391:64;9032:31:63;;;1136:3391:64;;;9109:17:63;;1136:3391:64;;;9109:17:63;;;1136:3391:64;9109:17:63;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9109:17:63;1136:3391:64;;9144:19:63;;1136:3391:64;9144:19:63;;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9144:19:63;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9144:19:63;-1:-1:-1;;9144:19:63;;;;;;:::i;:::-;1136:3391:64;;;8898:279:63;;;;;;;1136:3391:64;8898:279:63;;8958:4;1136:3391:64;8898:279:63;;1136:3391:64;8981:10:63;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1136:3391:64;;;;;;;;;:::i;:::-;8898:279:63;:13;;1136:3391:64;8898:279:63;;;;;;1136:3391:64;8898:279:63;;;1136:3391:64;;;;;;;;;;;8898:279:63;;1136:3391:64;8898:279:63;;1136:3391:64;8898:279:63;;;;;;1136:3391:64;8898:279:63;;;:::i;:::-;;;1136:3391:64;;;;;;;;;;;;;8898:279:63;;;;;;-1:-1:-1;8898:279:63;;1136:3391:64;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;9032:31:63;;;1136:3391:64;9032:31:63;;1136:3391:64;9032:31:63;;;;;;1136:3391:64;9032:31:63;;;:::i;:::-;;;1136:3391:64;;;;;;;9109:17:63;9032:31;;;;;-1:-1:-1;9032:31:63;;1136:3391:64;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:3391:64;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;7932:65:63;;;:::i;:::-;1136:3391:64;8012:16:63;1136:3391:64;8031:20:63;;1136:3391:64;8031:20:63;;1136:3391:64;;8012:39:63;;8008:109;;1136:3391:64;;;;;8141:22:63;;;1136:3391:64;8141:22:63;;;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8141:22:63;;-1:-1:-1;;8141:22:63;;;;;;:::i;:::-;1136:3391:64;8131:33:63;;1136:3391:64;;;;8178:18:63;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8178:18:63;;1136:3391:64;;;;;;;;;;;;;;;;;8168:29:63;;8131:66;8127:177;;1136:3391:64;8127:177:63;1136:3391:64;8220:73:63;1136:3391:64;;8220:73:63;1136:3391:64;;8220:73:63;;;;;;1136:3391:64;;;;;;;;;8220:73:63;8008:109;1136:3391:64;8008:109:63;;;;1136:3391:64;;;;;-1:-1:-1;;1136:3391:64;;;;;;;;;;;;;;;;;9397:50:63;;9393:123;;9545:53;9560:38;1136:3391:64;9545:53:63;;:131;;;;;1136:3391:64;9545:188:63;;;;1136:3391:64;9545:244:63;;;;1136:3391:64;;;;;;;9545:244:63;9764:25;9749:40;;;9545:244;;;:188;9707:26;9692:41;;;-1:-1:-1;9545:188:63;;:131;9629:47;9614:62;;;-1:-1:-1;9545:131:63;;9393:123;9470:35;1136:3391:64;9470:35:63;1136:3391:64;;9470:35:63;1136:3391:64;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1136:3391:64;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1136:3391:64;;;;:::o;:::-;;-1:-1:-1;;1136:3391:64;;;;;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1136:3391:64;;;2303:50:33;;;2320:22;;1136:3391:64;;;;;;;2303:50:33;;;;;;:::i;:::-;1136:3391:64;2293:61:33;;1931:430;:::o;1136:3391:64:-;;;;;;;;;;;;;;;;;;:::o;7303:295:63:-;;;1136:3391:64;7303:295:63;1136:3391:64;;:::i;:::-;;7520:34:63;;1136:3391:64;;;;;;;;;;;;;7573:18:63;;;:::i;1688:201:33:-;1762:20;1774:7;;;;1762:20;:::i;:::-;1136:3391:64;;;;1336:22:43;;;:6;;;:22;:6;;;1136:3391:64;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;1136:3391:64;;;;;1336:64:43;;;;;1136:3391:64;1336:64:43;;:22;:64;;1136:3391:64;1820:10:33;1136:3391:64;;;;1394:4:43;1136:3391:64;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1336:64:43:-;;;;;;;;;;;;;;;;:::i;:::-;;;1136:3391:64;;;;;;;:::i;:::-;1336:64:43;;;;;;;;;:22;1136:3391:64;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;10849:593:63;1136:3391:64;;;;;;10986:7:63;1136:3391:64;;;11032:19:63;1136:3391:64;;;11032:19:63;1136:3391:64;;11066:13:63;;11062:79;;1136:3391:64;;;;;11169:32:63;;;;1136:3391:64;11169:32:63;;11195:4;11169:32;;;1136:3391:64;11169:32:63;;;;;;;1136:3391:64;11169:32:63;;;10849:593;-1:-1:-1;11215:12:63;;;11243:36;11251:18;11243:36;;:::o;11211:178::-;11300:15;:26;11296:93;;10986:7;11399:36;10849:593;:::o;11296:93::-;11032:19;11342:36;;:::o;11169:32::-;;;;1136:3391:64;11169:32:63;;1136:3391:64;11169:32:63;;;;;;1136:3391:64;11169:32:63;;;:::i;:::-;;;1136:3391:64;;;;;11169:32:63;;;;;;;-1:-1:-1;11169:32:63;;11062:79;-1:-1:-1;1136:3391:64;;-1:-1:-1;1136:3391:64;;11095:35:63:o;4602:284::-;;;1136:3391:64;;3411:47:55;;;;;;1136:3391:64;;3411:47:55;;;1136:3391:64;4714:12:63;;;1136:3391:64;3411:47:55;;;;1136:3391:64;4728:1:63;1136:3391:64;;;;;3411:47:55;;;;;:::i;:::-;4728:1:63;1136:3391:64;;;;5615:25:55;;;;;;;;;;:::i;:::-;5657:69;;;4602:284:63;-1:-1:-1;4839:40:63;;1136:3391:64;;5657:103:55;;;;;4816:6:63;;5657:103:55;;;;;;;4602:284:63;3473:45:55;3469:201;;4602:284:63;1136:3391:64;;;;4728:1:63;1136:3391:64;4747:7:63;1136:3391:64;;4728:1:63;1136:3391:64;;;;;;;;4747:7:63;1136:3391:64;;;;;;;;;;4816:6:63;:::i;:::-;1136:3391:64;;;;;;;;;;;;;4839:40:63;4602:284::o;3469:201:55:-;3646:12;1136:3391:64;3561:43:55;1136:3391:64;;;3561:43:55;;;;;3411:47;3561:43;;1136:3391:64;4728:1:63;1136:3391:64;;;;;3561:43:55;;;;;:::i;:::-;;;:::i;:::-;3646:12;;:::i;:::-;3469:201;;;;;5657:103;5730:26;;;:30;;5657:103;;:69;1136:3391:64;;5669:22:55;;;-1:-1:-1;5669:56:55;;;;5657:69;-1:-1:-1;4839:40:63;;-1:-1:-1;5657:69:55;;5669:56;5695:30;;;;;;;;;;;;;;1136:3391:64;;;;4839:40:63;5695:30:55;1136:3391:64;5695:30:55;4816:6:63;5695:30:55;;;1136:3391:64;5695:30:55;;;;1136:3391:64;:::i;:::-;5669:56:55;;;;;;;;;;;;;;;;;10015:828:63;1136:3391:64;;:::i;:::-;;;;;;;;-1:-1:-1;1136:3391:64;;;10131:7:63;1136:3391:64;;;;-1:-1:-1;1136:3391:64;;;;;;;;:::i;:::-;;;;;;;;10131:7:63;1136:3391:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10162:24:63;10158:99;;1136:3391:64;;;;;;;;;;10456:32:63;1136:3391:64;10456:32:63;;10482:4;10456:32;;;1136:3391:64;10456:32:63;;1136:3391:64;10456:32:63;;;;;;;;;-1:-1:-1;10456:32:63;;;10015:828;1136:3391:64;;;;;10760:13:63;;1136:3391:64;;;;;;;:::i;:::-;;;10286:550:63;;1136:3391:64;10286:550:63;;1136:3391:64;;10286:550:63;;1136:3391:64;;10286:550:63;;1136:3391:64;10286:550:63;;;1136:3391:64;10613:7:63;10286:550;;;1136:3391:64;-1:-1:-1;1136:3391:64;10286:550:63;;1136:3391:64;10674:9:63;10286:550;;;1136:3391:64;10131:7:63;10286:550;;;1136:3391:64;10286:550:63;;;;1136:3391:64;10286:550:63;;;1136:3391:64;10015:828:63;:::o;10456:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:3391:64;;;;;10456:32:63;;;;;;;;;;1136:3391:64;;;-1:-1:-1;1136:3391:64;;;;;10158:99:63;1136:3391:64;;;;10209:37:63;;;;;;;1136:3391:64;;;;;;;;;;;10209:37:63;11638:182;11715:17;11711:103;;11638:182::o;11711:103::-;1136:3391:64;;;11755:48:63;;;1136:3391:64;11755:48:63;;;1136:3391:64;;;;;;;;;;;11755:48:63;11448:184;11517:15;:26;11513:113;;11448:184::o;11513:113::-;1136:3391:64;;;11566:49:63;;;1136:3391:64;11566:49:63;;;1136:3391:64;;;;;;;;;;;11566:49:63;11826:332;1136:3391:64;11885:13:63;;1136:3391:64;;;;;;;;12089:19:63;;;1136:3391:64;12089:19:63;;;1136:3391:64;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12019:4:63;1136:3391:64;;12057:1:63;11919:204;;;1136:3391:64;11919:204:63;;;1136:3391:64;11885:266:63;;;;;1136:3391:64;12057:1:63;1136:3391:64;;;;;;11885:266:63;;;;;;1136:3391:64;11885:266:63;;;;;;1136:3391:64;;;;;;:::i;:::-;12137:4:63;1136:3391:64;;;;11885:266:63;;;;;;;;;;11826:332;;;:::o;11885:266::-;1136:3391:64;;;;;11826:332:63:o;11885:266::-;1136:3391:64;;;12057:1:63;1136:3391:64;;;;;1303:160:55;1136:3391:64;;;1412:43:55;;;;1136:3391:64;;;;1412:43:55;;;1136:3391:64;;;;;;;;1412:43:55;;;1136:3391:64;;;;1412:43:55;1136:3391:64;1412:43:55;;:::i;:::-;1303:160::o;4059:629::-;2847:1:56;4059:629:55;1136:3391:64;3510:55:56;4059:629:55;1136:3391:64;3462:31:56;;;;;;;;;;;;:::i;:::-;3510:55;;;:::i;:::-;1136:3391:64;;4551:22:55;;;;:57;;;;4059:629;4547:135;;;;4059:629;:::o;4547:135::-;4631:40;2847:1:56;4631:40:55;;1136:3391:64;;2847:1:56;4631:40:55;4551:57;4578:30;;;;3462:31:56;4578:30:55;;;1136:3391:64;;;;3462:31:56;1136:3391:64;4578:30:55;;1136:3391:64;:::i;:::-;4577:31:55;4551:57;;;;1136:3391:64;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;1136:3391:64;;;;:::o;:::-;;;:::o;4625:582:56:-;;4797:8;;-1:-1:-1;1136:3391:64;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;1136:3391:64;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;1136:3391:64;5121:24:56;;5066:1;5121:24;1136:3391:64;5121:24:56;1136:3391:64;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","getVault()":"8d928af8","isValidSignature(bytes32,bytes)":"1626ba7e","protocolFeeSweeper()":"178ac96e","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum `amountOut` for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (`tokenOut` of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with _data\"}},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"ERC4626CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for `targetToken`, and sends the proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626CowSwapFeeBurner.sol\":\"ERC4626CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x85a45f3f10014a0f8be41157a32b6a5f905753ea64a4b64e29fc12b7deeecf39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3c74009ce36136b36c77c23935b8e4a7b4f253be2da2be4fb4a916b1ce43743\",\"dweb:/ipfs/QmcH36v3iN7SJJuF73AunLR2LtNxhVJ1wm63ph4dPZ4pcL\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0x3378a2ec05426b2a8a15e3d087f04dbc022d581115a8870d032e04aef8636eec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://87128d65a02e043f762eeff401d3a563a6bcd9bf87566936a690682a7acc8bad\",\"dweb:/ipfs/QmU5ZLUXW37ud3Xidjwb7TwkMuWyyuo9vAVwJdBvLU137H\"]},\"contracts/ERC4626CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa7fb1f9510762fd55f55dc6a427de7b54f11dfe4e87b60b9833d2d3e09e6bccd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8adf18dbbb677ef8bfb4fe4975ff0944f43768b9c3d5e0f9725c3d3bbe8fa5a0\",\"dweb:/ipfs/QmPZK8t7CEXufedhCEGfAqdFC1NrjQDY69eXvydzH61mpB\"]}},\"version\":1}"}},"contracts/PoolHelperCommon.sol":{"PoolHelperCommon":{"abi":[{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolRemovedFromSet","type":"event"},{"inputs":[{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"hasPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPools(address[])":"b36a4ab1","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPoolCount()":"8eec5d70","getPools(uint256,uint256)":"bbe95837","getVault()":"8d928af8","hasPool(address)":"1246dbf5","removePools(address[])":"4b164140"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"hasPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PoolAlreadyInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being removed\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was added\"}},\"PoolRemovedFromSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was removed\"}}},\"kind\":\"dev\",\"methods\":{\"addPools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add pools to the set.\",\"params\":{\"newPools\":\"List of pools to add\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getPoolCount()\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction.\",\"returns\":{\"_0\":\"poolCount The current number of pools in the set\"}},\"getPools(uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\",\"params\":{\"from\":\"Start index\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"hasPool(address)\":{\"params\":{\"pool\":\"Pool to check\"},\"returns\":{\"_0\":\"isPausable True if the pool is in the set, false otherwise\"}},\"removePools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove pools from the set.\",\"params\":{\"pools\":\"List of pools to remove\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"PoolAlreadyInSet(address)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"notice\":\"Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\"},\"PoolRemovedFromSet(address)\":{\"notice\":\"Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\"}},\"kind\":\"user\",\"methods\":{\"addPools(address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getPoolCount()\":{\"notice\":\"Get the number of pools.\"},\"getPools(uint256,uint256)\":{\"notice\":\"Get a range of pools.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"hasPool(address)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"removePools(address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"}},\"notice\":\"Common code for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolHelperCommon.sol\":\"PoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xc69ed5b725cd2b877ac74ee7288639d86297ca434418753833758611898d2018\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37b1b0fb636a1e35cf45a709cf87883b95abf66daf1b374456ceb2bc3f5fea08\",\"dweb:/ipfs/QmbcNhkXd5urdbC7SpD2CKVNuWYMHmca3oiTUPWhqoudZe\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x661784fa00ecc7842f0468d6c69d4f238b6fdf582a9d54042b682556b05a80d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ed5e9f2b41125d98ca74db929ff4880f6303bd560d95a4f7d51ea5ed80f7f789\",\"dweb:/ipfs/QmPzF4iWYDUURUTDWdoGYBkQs81RjDBZEKEubWTYFNijbX\"]}},\"version\":1}"}},"contracts/PoolPauseHelper.sol":{"PoolPauseHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolRemovedFromSet","type":"event"},{"inputs":[{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"hasPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100a857601f610e3c38819003918201601f19168301916001600160401b038311848410176100ac578084926020946040528339810103126100a857516001600160a01b0381168082036100a85730608052156100995760a052604051610d7b90816100c182396080518161095b015260a0518181816102bd0152818161045d01528181610504015281816106600152610a960152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060409080825260049081361015610016575f80fd5b5f3560e01c9081631246dbf514610786575080634b164140146106d3578063851c1bb3146106845780638d928af8146106345780638eec5d7014610617578063a20dc529146104d2578063aaabadc51461040a578063b36a4ab1146102455763bbe9583714610083575f80fd5b346102415781600319360112610241575f54602490813583358181118015610238575b801561022e575b610207576100bf8183979695976109ea565b956100e16100cc8861083a565b976100d98851998a6107cc565b80895261083a565b946020947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208a019701368837835b85811061017257505050505050825193849360208501916020865251809252840192915f5b82811061014557505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610136565b81819a98999a10156101dc576001905f805273ffffffffffffffffffffffffffffffffffffffff817f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630154166101d16101cb88846109ea565b8b6108ef565b520198979698610111565b836032847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847f4e23d035000000000000000000000000000000000000000000000000000000005f525ffd5b50828110156100ad565b508282116100a6565b5f80fd5b50346102415760209160206003193601126102415781359067ffffffffffffffff9283831161024157366023840112156102415782810135938411610241576024906005943660248260051b8701011161024157946102a2610a24565b5f9073ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016925b8881106102e857005b8581841b830101358881168091036102415787517fc673bdaf00000000000000000000000000000000000000000000000000000000815281878201528b818981895afa908115610400575f916103d3575b50156103a95761034881610cf0565b1561037f57907f099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c78b6001938a51908152a1016102df565b8690867f391de812000000000000000000000000000000000000000000000000000000005f52525ffd5b8690867f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103f391508c8d3d106103f9575b6103eb81836107cc565b8101906109d2565b5f610339565b503d6103e1565b89513d5f823e3d90fd5b5034610241575f6003193601126102415773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156104c857926020935f93610499575b505191168152f35b6104ba919350843d86116104c1575b6104b281836107cc565b8101906109a6565b915f610491565b503d6104a8565b83513d5f823e3d90fd5b509034610241576104e236610852565b6104ea610a24565b80519173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b85811061053157005b8261053c82846108ef565b5116805f526001602052845f2054156105ed57853b15610241578451907f55aca1ec0000000000000000000000000000000000000000000000000000000082528882015260245f828281838b5af180156105e35761059f575b5050600101610528565b67ffffffffffffffff82116105b95750845260015f610595565b6041897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b86513d5f823e3d90fd5b877f79ff313f000000000000000000000000000000000000000000000000000000005f525260245ffd5b8234610241575f600319360112610241576020905f549051908152f35b8234610241575f600319360112610241576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102415760206003193601126102415735907fffffffff0000000000000000000000000000000000000000000000000000000082168203610241576106cc602092610930565b9051908152f35b509034610241576106e336610852565b906106ec610a24565b8151915f5b8381106106fa57005b73ffffffffffffffffffffffffffffffffffffffff61071982846108ef565b511661072481610bc7565b1561075c57907f2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc60206001938651908152a1016106f1565b857f79ff313f000000000000000000000000000000000000000000000000000000005f525260245ffd5b9190503461024157602060031936011261024157359173ffffffffffffffffffffffffffffffffffffffff8316809303610241576020925f52600183525f205415158152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761080d57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161080d5760051b60200190565b602080600319830112610241576004359167ffffffffffffffff8311610241578060238401121561024157826004013561088b8161083a565b9361089960405195866107cc565b8185526024602086019260051b82010192831161024157602401905b8282106108c3575050505090565b813573ffffffffffffffffffffffffffffffffffffffff811681036102415781529083019083016108b5565b80518210156109035760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761080d5760405251902090565b90816020910312610241575173ffffffffffffffffffffffffffffffffffffffff811681036102415790565b90816020910312610241575180151581036102415790565b919082039182116109f757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610a507fffffffff000000000000000000000000000000000000000000000000000000005f3516610930565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b675784925f92610b72575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610b67575f92610b4a575b505015610b2257565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b610b609250803d106103f9576103eb81836107cc565b5f80610b19565b6040513d5f823e3d90fd5b6064919250610b8d90843d86116104c1576104b281836107cc565b9190610ac8565b5f54811015610903575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b5f818152600160205260409020548015610cea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908181018181116109f7575f54908382019182116109f757818103610c81575b5050505f548015610c5457810190610c3382610b94565b909182549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610cd4610c90610c9f93610b94565b90549060031b1c928392610b94565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080610c1c565b50505f90565b805f52600160205260405f2054155f14610d40575f546801000000000000000081101561080d57610d2a610c9f8260018594015f55610b94565b90555f54905f52600160205260405f2055600190565b505f9056fea2646970667358221220fdd91fc555bc18ff4ca0d68a02980d81dc3e66d337ce17826d4befedbe859c0a64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xA8 JUMPI PUSH1 0x1F PUSH2 0xE3C CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xAC JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xA8 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0xA8 JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x99 JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0xD7B SWAP1 DUP2 PUSH2 0xC1 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x95B ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2BD ADD MSTORE DUP2 DUP2 PUSH2 0x45D ADD MSTORE DUP2 DUP2 PUSH2 0x504 ADD MSTORE DUP2 DUP2 PUSH2 0x660 ADD MSTORE PUSH2 0xA96 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1246DBF5 EQ PUSH2 0x786 JUMPI POP DUP1 PUSH4 0x4B164140 EQ PUSH2 0x6D3 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x684 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x634 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0xA20DC529 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xB36A4AB1 EQ PUSH2 0x245 JUMPI PUSH4 0xBBE95837 EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH0 SLOAD PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD DUP4 CALLDATALOAD DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x238 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x22E JUMPI JUMPDEST PUSH2 0x207 JUMPI PUSH2 0xBF DUP2 DUP4 SWAP8 SWAP7 SWAP6 SWAP8 PUSH2 0x9EA JUMP JUMPDEST SWAP6 PUSH2 0xE1 PUSH2 0xCC DUP9 PUSH2 0x83A JUMP JUMPDEST SWAP8 PUSH2 0xD9 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x7CC JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x83A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x20 DUP11 ADD SWAP8 ADD CALLDATASIZE DUP9 CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x172 JUMPI POP POP POP POP POP POP DUP3 MLOAD SWAP4 DUP5 SWAP4 PUSH1 0x20 DUP6 ADD SWAP2 PUSH1 0x20 DUP7 MSTORE MLOAD DUP1 SWAP3 MSTORE DUP5 ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x145 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x136 JUMP JUMPDEST DUP2 DUP2 SWAP11 SWAP9 SWAP10 SWAP11 LT ISZERO PUSH2 0x1DC JUMPI PUSH1 0x1 SWAP1 PUSH0 DUP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SLOAD AND PUSH2 0x1D1 PUSH2 0x1CB DUP9 DUP5 PUSH2 0x9EA JUMP JUMPDEST DUP12 PUSH2 0x8EF JUMP JUMPDEST MSTORE ADD SWAP9 SWAP8 SWAP7 SWAP9 PUSH2 0x111 JUMP JUMPDEST DUP4 PUSH1 0x32 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 DUP2 LT ISZERO PUSH2 0xAD JUMP JUMPDEST POP DUP3 DUP3 GT PUSH2 0xA6 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP4 GT PUSH2 0x241 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP3 DUP2 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x241 JUMPI PUSH1 0x24 SWAP1 PUSH1 0x5 SWAP5 CALLDATASIZE PUSH1 0x24 DUP3 PUSH1 0x5 SHL DUP8 ADD ADD GT PUSH2 0x241 JUMPI SWAP5 PUSH2 0x2A2 PUSH2 0xA24 JUMP JUMPDEST PUSH0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP3 JUMPDEST DUP9 DUP2 LT PUSH2 0x2E8 JUMPI STOP JUMPDEST DUP6 DUP2 DUP5 SHL DUP4 ADD ADD CALLDATALOAD DUP9 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x241 JUMPI DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE DUP12 DUP2 DUP10 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x400 JUMPI PUSH0 SWAP2 PUSH2 0x3D3 JUMPI JUMPDEST POP ISZERO PUSH2 0x3A9 JUMPI PUSH2 0x348 DUP2 PUSH2 0xCF0 JUMP JUMPDEST ISZERO PUSH2 0x37F JUMPI SWAP1 PUSH32 0x99B605510FFA7C63C0ABAE2DDB315D152C3780CB7FB860FE267AEEB55AA79C7 DUP12 PUSH1 0x1 SWAP4 DUP11 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x2DF JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x391DE81200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3F3 SWAP2 POP DUP13 DUP14 RETURNDATASIZE LT PUSH2 0x3F9 JUMPI JUMPDEST PUSH2 0x3EB DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x9D2 JUMP JUMPDEST PUSH0 PUSH2 0x339 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3E1 JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x241 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x4C8 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x499 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x4BA SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x4C1 JUMPI JUMPDEST PUSH2 0x4B2 DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x9A6 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x491 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4A8 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x241 JUMPI PUSH2 0x4E2 CALLDATASIZE PUSH2 0x852 JUMP JUMPDEST PUSH2 0x4EA PUSH2 0xA24 JUMP JUMPDEST DUP1 MLOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x531 JUMPI STOP JUMPDEST DUP3 PUSH2 0x53C DUP3 DUP5 PUSH2 0x8EF JUMP JUMPDEST MLOAD AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD ISZERO PUSH2 0x5ED JUMPI DUP6 EXTCODESIZE ISZERO PUSH2 0x241 JUMPI DUP5 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP9 DUP3 ADD MSTORE PUSH1 0x24 PUSH0 DUP3 DUP3 DUP2 DUP4 DUP12 GAS CALL DUP1 ISZERO PUSH2 0x5E3 JUMPI PUSH2 0x59F JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x528 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5B9 JUMPI POP DUP5 MSTORE PUSH1 0x1 PUSH0 PUSH2 0x595 JUMP JUMPDEST PUSH1 0x41 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x241 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x241 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI PUSH2 0x6CC PUSH1 0x20 SWAP3 PUSH2 0x930 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x241 JUMPI PUSH2 0x6E3 CALLDATASIZE PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH2 0x6EC PUSH2 0xA24 JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x6FA JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x719 DUP3 DUP5 PUSH2 0x8EF JUMP JUMPDEST MLOAD AND PUSH2 0x724 DUP2 PUSH2 0xBC7 JUMP JUMPDEST ISZERO PUSH2 0x75C JUMPI SWAP1 PUSH32 0x2D6E1422E38CF8B1C4F2314722A67F167A89F205D5109A044F5F8A89EECB45DC PUSH1 0x20 PUSH1 0x1 SWAP4 DUP7 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x6F1 JUMP JUMPDEST DUP6 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x241 JUMPI PUSH1 0x20 SWAP3 PUSH0 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH0 KECCAK256 SLOAD ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x80D JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x80D JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x241 JUMPI DUP1 PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x88B DUP2 PUSH2 0x83A JUMP JUMPDEST SWAP4 PUSH2 0x899 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x241 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8C3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x241 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x8B5 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x903 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x80D JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x241 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x241 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x9F7 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xA50 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x930 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB67 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xB72 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB67 JUMPI PUSH0 SWAP3 PUSH2 0xB4A JUMPI JUMPDEST POP POP ISZERO PUSH2 0xB22 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xB60 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3F9 JUMPI PUSH2 0x3EB DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xB19 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xB8D SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x4C1 JUMPI PUSH2 0x4B2 DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xAC8 JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0x903 JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xCEA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 ADD DUP2 DUP2 GT PUSH2 0x9F7 JUMPI PUSH0 SLOAD SWAP1 DUP4 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x9F7 JUMPI DUP2 DUP2 SUB PUSH2 0xC81 JUMPI JUMPDEST POP POP POP PUSH0 SLOAD DUP1 ISZERO PUSH2 0xC54 JUMPI DUP2 ADD SWAP1 PUSH2 0xC33 DUP3 PUSH2 0xB94 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH0 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xCD4 PUSH2 0xC90 PUSH2 0xC9F SWAP4 PUSH2 0xB94 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 PUSH2 0xB94 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC1C JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH0 EQ PUSH2 0xD40 JUMPI PUSH0 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x80D JUMPI PUSH2 0xD2A PUSH2 0xC9F DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH0 SSTORE PUSH2 0xB94 JUMP JUMPDEST SWAP1 SSTORE PUSH0 SLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0xD9 0x1F 0xC5 SSTORE 0xBC XOR SELFDESTRUCT 0x4C LOG0 0xD6 DUP11 MUL SWAP9 0xD DUP2 0xDC RETURNDATACOPY PUSH7 0xD337CE17826D4B 0xEF 0xED 0xBE DUP6 SWAP13 EXP PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"328:721:66:-:0;;;;;;;;;;;;;-1:-1:-1;;328:721:66;;;;-1:-1:-1;;;;;328:721:66;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;328:721:66;;;;;;;922:4:45;1347:46:33;;943:28:43;939:79;;1028:14;;328:721:66;;;;;;;;1347:46:33;328:721:66;;;;;1028:14:43;328:721:66;;;;;;;;;;;;;;;;;;;;;;;;;;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;328:721:66;-1:-1:-1;328:721:66;;;;;;-1:-1:-1;328:721:66;;;;;-1:-1:-1;328:721:66"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_address_dyn":{"entryPoint":2130,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2514,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2470,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":2106,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2538,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1996,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":3312,"id":12079,"parameterSlots":1,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":2596,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":2352,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_remove":{"entryPoint":3015,"id":12163,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_address_dyn":{"entryPoint":2287,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":2964,"id":null,"parameterSlots":1,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":2395}],"6692":[{"length":32,"start":701},{"length":32,"start":1117},{"length":32,"start":1284},{"length":32,"start":1632},{"length":32,"start":2710}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f3560e01c9081631246dbf514610786575080634b164140146106d3578063851c1bb3146106845780638d928af8146106345780638eec5d7014610617578063a20dc529146104d2578063aaabadc51461040a578063b36a4ab1146102455763bbe9583714610083575f80fd5b346102415781600319360112610241575f54602490813583358181118015610238575b801561022e575b610207576100bf8183979695976109ea565b956100e16100cc8861083a565b976100d98851998a6107cc565b80895261083a565b946020947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208a019701368837835b85811061017257505050505050825193849360208501916020865251809252840192915f5b82811061014557505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610136565b81819a98999a10156101dc576001905f805273ffffffffffffffffffffffffffffffffffffffff817f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630154166101d16101cb88846109ea565b8b6108ef565b520198979698610111565b836032847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847f4e23d035000000000000000000000000000000000000000000000000000000005f525ffd5b50828110156100ad565b508282116100a6565b5f80fd5b50346102415760209160206003193601126102415781359067ffffffffffffffff9283831161024157366023840112156102415782810135938411610241576024906005943660248260051b8701011161024157946102a2610a24565b5f9073ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016925b8881106102e857005b8581841b830101358881168091036102415787517fc673bdaf00000000000000000000000000000000000000000000000000000000815281878201528b818981895afa908115610400575f916103d3575b50156103a95761034881610cf0565b1561037f57907f099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c78b6001938a51908152a1016102df565b8690867f391de812000000000000000000000000000000000000000000000000000000005f52525ffd5b8690867f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103f391508c8d3d106103f9575b6103eb81836107cc565b8101906109d2565b5f610339565b503d6103e1565b89513d5f823e3d90fd5b5034610241575f6003193601126102415773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156104c857926020935f93610499575b505191168152f35b6104ba919350843d86116104c1575b6104b281836107cc565b8101906109a6565b915f610491565b503d6104a8565b83513d5f823e3d90fd5b509034610241576104e236610852565b6104ea610a24565b80519173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b85811061053157005b8261053c82846108ef565b5116805f526001602052845f2054156105ed57853b15610241578451907f55aca1ec0000000000000000000000000000000000000000000000000000000082528882015260245f828281838b5af180156105e35761059f575b5050600101610528565b67ffffffffffffffff82116105b95750845260015f610595565b6041897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b86513d5f823e3d90fd5b877f79ff313f000000000000000000000000000000000000000000000000000000005f525260245ffd5b8234610241575f600319360112610241576020905f549051908152f35b8234610241575f600319360112610241576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102415760206003193601126102415735907fffffffff0000000000000000000000000000000000000000000000000000000082168203610241576106cc602092610930565b9051908152f35b509034610241576106e336610852565b906106ec610a24565b8151915f5b8381106106fa57005b73ffffffffffffffffffffffffffffffffffffffff61071982846108ef565b511661072481610bc7565b1561075c57907f2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc60206001938651908152a1016106f1565b857f79ff313f000000000000000000000000000000000000000000000000000000005f525260245ffd5b9190503461024157602060031936011261024157359173ffffffffffffffffffffffffffffffffffffffff8316809303610241576020925f52600183525f205415158152f35b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761080d57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161080d5760051b60200190565b602080600319830112610241576004359167ffffffffffffffff8311610241578060238401121561024157826004013561088b8161083a565b9361089960405195866107cc565b8185526024602086019260051b82010192831161024157602401905b8282106108c3575050505090565b813573ffffffffffffffffffffffffffffffffffffffff811681036102415781529083019083016108b5565b80518210156109035760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761080d5760405251902090565b90816020910312610241575173ffffffffffffffffffffffffffffffffffffffff811681036102415790565b90816020910312610241575180151581036102415790565b919082039182116109f757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610a507fffffffff000000000000000000000000000000000000000000000000000000005f3516610930565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b675784925f92610b72575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610b67575f92610b4a575b505015610b2257565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b610b609250803d106103f9576103eb81836107cc565b5f80610b19565b6040513d5f823e3d90fd5b6064919250610b8d90843d86116104c1576104b281836107cc565b9190610ac8565b5f54811015610903575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b5f818152600160205260409020548015610cea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908181018181116109f7575f54908382019182116109f757818103610c81575b5050505f548015610c5457810190610c3382610b94565b909182549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610cd4610c90610c9f93610b94565b90549060031b1c928392610b94565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080610c1c565b50505f90565b805f52600160205260405f2054155f14610d40575f546801000000000000000081101561080d57610d2a610c9f8260018594015f55610b94565b90555f54905f52600160205260405f2055600190565b505f9056fea2646970667358221220fdd91fc555bc18ff4ca0d68a02980d81dc3e66d337ce17826d4befedbe859c0a64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1246DBF5 EQ PUSH2 0x786 JUMPI POP DUP1 PUSH4 0x4B164140 EQ PUSH2 0x6D3 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x684 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x634 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0xA20DC529 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x40A JUMPI DUP1 PUSH4 0xB36A4AB1 EQ PUSH2 0x245 JUMPI PUSH4 0xBBE95837 EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH0 SLOAD PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD DUP4 CALLDATALOAD DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x238 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x22E JUMPI JUMPDEST PUSH2 0x207 JUMPI PUSH2 0xBF DUP2 DUP4 SWAP8 SWAP7 SWAP6 SWAP8 PUSH2 0x9EA JUMP JUMPDEST SWAP6 PUSH2 0xE1 PUSH2 0xCC DUP9 PUSH2 0x83A JUMP JUMPDEST SWAP8 PUSH2 0xD9 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x7CC JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x83A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x20 DUP11 ADD SWAP8 ADD CALLDATASIZE DUP9 CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x172 JUMPI POP POP POP POP POP POP DUP3 MLOAD SWAP4 DUP5 SWAP4 PUSH1 0x20 DUP6 ADD SWAP2 PUSH1 0x20 DUP7 MSTORE MLOAD DUP1 SWAP3 MSTORE DUP5 ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x145 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x136 JUMP JUMPDEST DUP2 DUP2 SWAP11 SWAP9 SWAP10 SWAP11 LT ISZERO PUSH2 0x1DC JUMPI PUSH1 0x1 SWAP1 PUSH0 DUP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SLOAD AND PUSH2 0x1D1 PUSH2 0x1CB DUP9 DUP5 PUSH2 0x9EA JUMP JUMPDEST DUP12 PUSH2 0x8EF JUMP JUMPDEST MSTORE ADD SWAP9 SWAP8 SWAP7 SWAP9 PUSH2 0x111 JUMP JUMPDEST DUP4 PUSH1 0x32 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 DUP2 LT ISZERO PUSH2 0xAD JUMP JUMPDEST POP DUP3 DUP3 GT PUSH2 0xA6 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP4 GT PUSH2 0x241 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP3 DUP2 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x241 JUMPI PUSH1 0x24 SWAP1 PUSH1 0x5 SWAP5 CALLDATASIZE PUSH1 0x24 DUP3 PUSH1 0x5 SHL DUP8 ADD ADD GT PUSH2 0x241 JUMPI SWAP5 PUSH2 0x2A2 PUSH2 0xA24 JUMP JUMPDEST PUSH0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP3 JUMPDEST DUP9 DUP2 LT PUSH2 0x2E8 JUMPI STOP JUMPDEST DUP6 DUP2 DUP5 SHL DUP4 ADD ADD CALLDATALOAD DUP9 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x241 JUMPI DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE DUP12 DUP2 DUP10 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x400 JUMPI PUSH0 SWAP2 PUSH2 0x3D3 JUMPI JUMPDEST POP ISZERO PUSH2 0x3A9 JUMPI PUSH2 0x348 DUP2 PUSH2 0xCF0 JUMP JUMPDEST ISZERO PUSH2 0x37F JUMPI SWAP1 PUSH32 0x99B605510FFA7C63C0ABAE2DDB315D152C3780CB7FB860FE267AEEB55AA79C7 DUP12 PUSH1 0x1 SWAP4 DUP11 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x2DF JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x391DE81200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3F3 SWAP2 POP DUP13 DUP14 RETURNDATASIZE LT PUSH2 0x3F9 JUMPI JUMPDEST PUSH2 0x3EB DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x9D2 JUMP JUMPDEST PUSH0 PUSH2 0x339 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3E1 JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x241 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x4C8 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x499 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x4BA SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x4C1 JUMPI JUMPDEST PUSH2 0x4B2 DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x9A6 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x491 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4A8 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x241 JUMPI PUSH2 0x4E2 CALLDATASIZE PUSH2 0x852 JUMP JUMPDEST PUSH2 0x4EA PUSH2 0xA24 JUMP JUMPDEST DUP1 MLOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x531 JUMPI STOP JUMPDEST DUP3 PUSH2 0x53C DUP3 DUP5 PUSH2 0x8EF JUMP JUMPDEST MLOAD AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD ISZERO PUSH2 0x5ED JUMPI DUP6 EXTCODESIZE ISZERO PUSH2 0x241 JUMPI DUP5 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP9 DUP3 ADD MSTORE PUSH1 0x24 PUSH0 DUP3 DUP3 DUP2 DUP4 DUP12 GAS CALL DUP1 ISZERO PUSH2 0x5E3 JUMPI PUSH2 0x59F JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x528 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5B9 JUMPI POP DUP5 MSTORE PUSH1 0x1 PUSH0 PUSH2 0x595 JUMP JUMPDEST PUSH1 0x41 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x241 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x241 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI PUSH2 0x6CC PUSH1 0x20 SWAP3 PUSH2 0x930 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x241 JUMPI PUSH2 0x6E3 CALLDATASIZE PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH2 0x6EC PUSH2 0xA24 JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x6FA JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x719 DUP3 DUP5 PUSH2 0x8EF JUMP JUMPDEST MLOAD AND PUSH2 0x724 DUP2 PUSH2 0xBC7 JUMP JUMPDEST ISZERO PUSH2 0x75C JUMPI SWAP1 PUSH32 0x2D6E1422E38CF8B1C4F2314722A67F167A89F205D5109A044F5F8A89EECB45DC PUSH1 0x20 PUSH1 0x1 SWAP4 DUP7 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x6F1 JUMP JUMPDEST DUP6 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x241 JUMPI PUSH1 0x20 SWAP3 PUSH0 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH0 KECCAK256 SLOAD ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x80D JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x80D JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x241 JUMPI DUP1 PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x88B DUP2 PUSH2 0x83A JUMP JUMPDEST SWAP4 PUSH2 0x899 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x7CC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x241 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8C3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x241 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x8B5 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x903 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x80D JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x241 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x241 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x9F7 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xA50 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x930 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB67 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xB72 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB67 JUMPI PUSH0 SWAP3 PUSH2 0xB4A JUMPI JUMPDEST POP POP ISZERO PUSH2 0xB22 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xB60 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3F9 JUMPI PUSH2 0x3EB DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xB19 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xB8D SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x4C1 JUMPI PUSH2 0x4B2 DUP2 DUP4 PUSH2 0x7CC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xAC8 JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0x903 JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xCEA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 ADD DUP2 DUP2 GT PUSH2 0x9F7 JUMPI PUSH0 SLOAD SWAP1 DUP4 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x9F7 JUMPI DUP2 DUP2 SUB PUSH2 0xC81 JUMPI JUMPDEST POP POP POP PUSH0 SLOAD DUP1 ISZERO PUSH2 0xC54 JUMPI DUP2 ADD SWAP1 PUSH2 0xC33 DUP3 PUSH2 0xB94 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH0 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xCD4 PUSH2 0xC90 PUSH2 0xC9F SWAP4 PUSH2 0xB94 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 PUSH2 0xB94 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC1C JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH0 EQ PUSH2 0xD40 JUMPI PUSH0 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x80D JUMPI PUSH2 0xD2A PUSH2 0xC9F DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH0 SSTORE PUSH2 0xB94 JUMP JUMPDEST SWAP1 SSTORE PUSH0 SLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 REVERT 0xD9 0x1F 0xC5 SSTORE 0xBC XOR SELFDESTRUCT 0x4C LOG0 0xD6 DUP11 MUL SWAP9 0xD DUP2 0xDC RETURNDATACOPY PUSH7 0xD337CE17826D4B 0xEF 0xED 0xBE DUP6 SWAP13 EXP PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"328:721:66:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;328:721:66;1424:26:45;;;328:721:66;;;;;;;;;;;;-1:-1:-1;;328:721:66;;;;;;;;;;;;;2965:9:65;;;:28;;;;328:721:66;2965:50:65;;;;328:721:66;2961:106:65;;3099:9;;;;;;;;:::i;:::-;328:721:66;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;3124:16:65;3142:6;;;;;;328:721:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;328:721:66;;;;;;;;;;;;3150:3:65;328:721:66;;;;;;;;;;;;;;;;;;;;;3169:30:65;3175:8;;;;:::i;:::-;3169:30;;:::i;:::-;328:721:66;;3124:16:65;;;;;;328:721:66;;;;;;;;;;2961:106:65;3038:18;;328:721:66;3038:18:65;328:721:66;3038:18:65;2965:50;2997:18;;;;;2965:50;;:28;2978:15;;;;2965:28;;328:721:66;;;;;;;;;;;;-1:-1:-1;;328:721:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;:::i;:::-;328:721:66;;;1124:6:43;;;328:721:66;1305:536:65;1325:10;;;;;;328:721:66;1337:3:65;328:721:66;;;;;;;;;;;;;;;;;;;1452:33:65;;;;;;328:721:66;1452:33:65;;;;;;;;;;;;328:721:66;1452:33:65;;;1337:3;328:721:66;;1448:124:65;;8409:50:60;;;:::i;:::-;328:721:66;1698:93:65;;328:721:66;1810:20:65;328:721:66;;;;;;;;1810:20:65;328:721:66;1310:13:65;;1698:93;1754:22;;;;328:721:66;1754:22:65;328:721:66;;1754:22:65;1448:124;1521:36;;;;328:721:66;1521:36:65;328:721:66;;1521:36:65;1452:33;;;;;;;-1:-1:-1;1452:33:65;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;328:721:66;;;;;;;;;;;;;;;-1:-1:-1;;328:721:66;;;;;;1424:26:45;328:721:66;;1424:26:45;;328:721:66;1424:26:45;;1124:6:43;;;328:721:66;1424:26:45;;;;;;;;;;328:721:66;1424:26:45;;;328:721:66;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;328:721:66;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;328:721:66;;;;1124:6:43;328:721:66;;;;899:10;;;;;;328:721;911:3;945:8;;;;;:::i;:::-;328:721;;;;;;;;;;;;4360:26:60;3532:86:65;;1004:26:66;;;;;328:721;;1004:26;328:721;1004:26;;;;;328:721;;;1004:26;;;;;;;;;;;;;911:3;;;328:721;;884:13;;1004:26;328:721;;;;;-1:-1:-1;328:721:66;;;1004:26;;;328:721;;;;;;;;;1004:26;328:721;;;;;;;;;3532:86:65;3589:18;;328:721:66;3589:18:65;328:721:66;;;3589:18:65;328:721:66;;;;;;-1:-1:-1;;328:721:66;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:721:66;;;;;;;;;1124:6:43;328:721:66;;;;;;;;;;-1:-1:-1;;328:721:66;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;1525:73:33;;;:::i;:::-;328:721:66;;2010:13:65;328:721:66;2025:10:65;;;;;;328:721:66;2037:3:65;328:721:66;2071:8:65;;;;:::i;:::-;328:721:66;;8730:53:60;;;:::i;:::-;328:721:66;2093:92:65;;328:721:66;2204:24:65;328:721:66;;;;;;;;2204:24:65;328:721:66;2010:13:65;;2093:92;2152:18;;328:721:66;2152:18:65;328:721:66;;;2152:18:65;328:721:66;;;;;;;;-1:-1:-1;;328:721:66;;;;;;;;;;;;;;;;;;;4360:14:60;328:721:66;;;;;4360:26:60;;328:721:66;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;328:721:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;328:721:66;;;2303:50:33;;;2320:22;;328:721:66;;;;;;;2303:50:33;;;328:721:66;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;328:721:66:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;1688:201:33;1762:20;1774:7;;;;1762:20;:::i;:::-;328:721:66;;;;1336:22:43;;;:6;;;:22;:6;;;328:721:66;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;328:721:66;;;;;1336:64:43;;;;;328:721:66;1336:64:43;;:22;:64;;328:721:66;1820:10:33;328:721:66;;;;1394:4:43;328:721:66;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:43;1774:7:33;1854:18;1336:64:43;;;;;;-1:-1:-1;1336:64:43;;;;;;:::i;:::-;;;;;;328:721:66;;;1774:7:33;328:721:66;;;;;1336:22:43;328:721:66;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;328:721:66;;;;;;;;;;;;;;;;:::o;2815:1368:60:-;328:721:66;;;;3010:14:60;328:721:66;;;;;;3046:13:60;;;;328:721:66;;;;;;;;;;;;;;;;;;;;;3521:23:60;;;3517:378;;3042:1135;328:721:66;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3010:14:60;328:721:66;;;;;;;3010:14:60;4112:11;:::o;328:721:66:-;;;;;;;;;;3517:378:60;328:721:66;3584:22:60;3705:23;3584:22;;:::i;:::-;328:721:66;;;;;;3705:23:60;;;;:::i;:::-;328:721:66;;;;;;;;;;;;;;;;;;;;;;;;3010:14:60;328:721:66;;;;;;3517:378:60;;;;;3042:1135;4154:12;;328:721:66;4154:12:60;:::o;2241:406::-;328:721:66;;;4360:14:60;328:721:66;;;;;;4360:26:60;2320:321;328:721:66;;;;;;;;;;;;;;4360:14:60;328:721:66;;;;;;:::i;:::-;;;;;;;;4360:14:60;328:721:66;;;;;;4360:14:60;2576:11;:::o;2320:321::-;2618:12;328:721:66;2618:12:60;:::o"},"methodIdentifiers":{"addPools(address[])":"b36a4ab1","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPoolCount()":"8eec5d70","getPools(uint256,uint256)":"bbe95837","getVault()":"8d928af8","hasPool(address)":"1246dbf5","pausePools(address[])":"a20dc529","removePools(address[])":"4b164140"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"hasPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PoolAlreadyInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being removed\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was added\"}},\"PoolRemovedFromSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was removed\"}}},\"kind\":\"dev\",\"methods\":{\"addPools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add pools to the set.\",\"params\":{\"newPools\":\"List of pools to add\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getPoolCount()\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction.\",\"returns\":{\"_0\":\"poolCount The current number of pools in the set\"}},\"getPools(uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\",\"params\":{\"from\":\"Start index\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"hasPool(address)\":{\"params\":{\"pool\":\"Pool to check\"},\"returns\":{\"_0\":\"isPausable True if the pool is in the set, false otherwise\"}},\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}},\"removePools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove pools from the set.\",\"params\":{\"pools\":\"List of pools to remove\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"PoolAlreadyInSet(address)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"notice\":\"Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\"},\"PoolRemovedFromSet(address)\":{\"notice\":\"Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\"}},\"kind\":\"user\",\"methods\":{\"addPools(address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getPoolCount()\":{\"notice\":\"Get the number of pools.\"},\"getPools(uint256,uint256)\":{\"notice\":\"Get a range of pools.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"hasPool(address)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"},\"removePools(address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolPauseHelper.sol\":\"PoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xc69ed5b725cd2b877ac74ee7288639d86297ca434418753833758611898d2018\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37b1b0fb636a1e35cf45a709cf87883b95abf66daf1b374456ceb2bc3f5fea08\",\"dweb:/ipfs/QmbcNhkXd5urdbC7SpD2CKVNuWYMHmca3oiTUPWhqoudZe\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x661784fa00ecc7842f0468d6c69d4f238b6fdf582a9d54042b682556b05a80d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ed5e9f2b41125d98ca74db929ff4880f6303bd560d95a4f7d51ea5ed80f7f789\",\"dweb:/ipfs/QmPzF4iWYDUURUTDWdoGYBkQs81RjDBZEKEubWTYFNijbX\"]},\"contracts/PoolPauseHelper.sol\":{\"keccak256\":\"0x06c9127eaaf2e9358d8e4da98b94596a95a3649ef0cf4b1f83842f3bd6dd33e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7c471bee15449befb5edc6e65f9dd1e8de9393081822215278716a704d8825b8\",\"dweb:/ipfs/QmevXf62L8YibvM7UYhzzvm7ucxgNCfrPRSn3SySmn5frY\"]}},\"version\":1}"}},"contracts/PoolSwapFeeHelper.sol":{"PoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolRemovedFromSet","type":"event"},{"inputs":[{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"hasPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100a757601f610f8938819003918201601f19168301916001600160401b038311848410176100ab578084926020946040528339810103126100a757516001600160a01b0381168082036100a75730608052156100985760a052604051610ec990816100c0823960805181610a88015260a05181818160d1015281816103f9015281816106ba015281816107780152610bc30152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049081361015610015575f80fd5b5f925f3560e01c9081631246dbf514610930575080634b164140146107ec578063851c1bb31461079c5780638d928af81461074c5780638eec5d701461072f578063aaabadc514610666578063b36a4ab114610381578063bbe95837146101c15763d15126ba14610084575f80fd5b3461019257806003193601126101925761009c610973565b916100a5610b51565b73ffffffffffffffffffffffffffffffffffffffff80931692835f526001602052825f205415610196577f00000000000000000000000000000000000000000000000000000000000000001692833b15610192575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561018857610145578380f35b9091925067ffffffffffffffff831161015c575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b83827f79ff313f000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101925781600319360112610192575f54602490813583358181118015610378575b801561036e575b610347576101ff818397969597610b17565b9561022161020c88610a04565b976102198851998a610996565b808952610a04565b946020947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208a019701368837835b8581106102b257505050505050825193849360208501916020865251809252840192915f5b82811061028557505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610276565b81819a98999a101561031c576001905f805273ffffffffffffffffffffffffffffffffffffffff817f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301541661031161030b8884610b17565b8b610a1c565b520198979698610251565b836032847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847f4e23d035000000000000000000000000000000000000000000000000000000005f525ffd5b50828110156101ed565b508282116101e6565b503461019257602091826003193601126101925767ffffffffffffffff91813583811161019257366023820112156101925780830135928484116101925760249160059536848760051b84010111610192576103de969596610b51565b5f9573ffffffffffffffffffffffffffffffffffffffff92837f000000000000000000000000000000000000000000000000000000000000000016975b89811061042457005b8681841b830101358581168091036101925788517fc673bdaf0000000000000000000000000000000000000000000000000000000081528781018290528c818a818e5afa90811561065c575f9161062f575b50156106055788517fe9ddeb26000000000000000000000000000000000000000000000000000000008152878101829052606080828b818f5afa9182156105fb57918e9189935f92610560575b5050015116610536576104d581610e3e565b1561050c57907f099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c78c6001938b51908152a10161041b565b8790877f391de812000000000000000000000000000000000000000000000000000000005f52525ffd5b8790877ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b92509250508181813d83116105f4575b61057a8183610996565b81010312610192578a51918201828110888211176105c957916105be8f928d908b9582526105a781610cc1565b84526105b4858201610cc1565b8585015201610cc1565b8c8201528f806104c3565b8a60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b503d610570565b8b513d5f823e3d90fd5b8790877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b61064f91508d803d10610655575b6106478183610996565b810190610aff565b8d610476565b503d61063d565b8a513d5f823e3d90fd5b509034610192575f6003193601126101925773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561072557926020935f936106f6575b505191168152f35b610717919350843d861161071e575b61070f8183610996565b810190610ad3565b91846106ee565b503d610705565b83513d5f823e3d90fd5b5034610192575f600319360112610192576020905f549051908152f35b5034610192575f600319360112610192576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101925760206003193601126101925735907fffffffff0000000000000000000000000000000000000000000000000000000082168203610192576107e5602092610a5d565b9051908152f35b50346101925760209160206003193601126101925780359167ffffffffffffffff8311610192573660238401121561019257828201359260249061082f85610a04565b9461083c84519687610996565b8086526024602087019160051b8301019136831161019257602401905b8282106109045750505061086b610b51565b8351935f5b85811061087957005b73ffffffffffffffffffffffffffffffffffffffff6108988284610a1c565b51166108a381610d15565b156108da57907f2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc886001938751908152a101610870565b8390867f79ff313f000000000000000000000000000000000000000000000000000000005f52525ffd5b813573ffffffffffffffffffffffffffffffffffffffff81168103610192578152908701908701610859565b9050346101925760206003193601126101925760209173ffffffffffffffffffffffffffffffffffffffff610963610973565b165f52600183525f205415158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109d757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109d75760051b60200190565b8051821015610a305760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176109d75760405251902090565b90816020910312610192575173ffffffffffffffffffffffffffffffffffffffff811681036101925790565b90816020910312610192575180151581036101925790565b91908203918211610b2457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610b7d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610a5d565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c945784925f92610c9f575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610c94575f92610c77575b505015610c4f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b610c8d9250803d10610655576106478183610996565b5f80610c46565b6040513d5f823e3d90fd5b6064919250610cba90843d861161071e5761070f8183610996565b9190610bf5565b519073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b5f54811015610a30575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b5f818152600160205260409020548015610e38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90818101818111610b24575f5490838201918211610b2457818103610dcf575b5050505f548015610da257810190610d8182610ce2565b909182549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610e22610dde610ded93610ce2565b90549060031b1c928392610ce2565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080610d6a565b50505f90565b805f52600160205260405f2054155f14610e8e575f54680100000000000000008110156109d757610e78610ded8260018594015f55610ce2565b90555f54905f52600160205260405f2055600190565b505f9056fea2646970667358221220a58597f7c6ecdaf47a51574913ef7f516d2d82e20b157a5e6d2fc9fcc981594f64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xA7 JUMPI PUSH1 0x1F PUSH2 0xF89 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xAB JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xA7 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0xA7 JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x98 JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0xEC9 SWAP1 DUP2 PUSH2 0xC0 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xA88 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xD1 ADD MSTORE DUP2 DUP2 PUSH2 0x3F9 ADD MSTORE DUP2 DUP2 PUSH2 0x6BA ADD MSTORE DUP2 DUP2 PUSH2 0x778 ADD MSTORE PUSH2 0xBC3 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1246DBF5 EQ PUSH2 0x930 JUMPI POP DUP1 PUSH4 0x4B164140 EQ PUSH2 0x7EC JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x79C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x74C JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x72F JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0xB36A4AB1 EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0xBBE95837 EQ PUSH2 0x1C1 JUMPI PUSH4 0xD15126BA EQ PUSH2 0x84 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x192 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH2 0x9C PUSH2 0x973 JUMP JUMPDEST SWAP2 PUSH2 0xA5 PUSH2 0xB51 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SLOAD ISZERO PUSH2 0x196 JUMPI PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x192 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x188 JUMPI PUSH2 0x145 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x15C JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP4 DUP3 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x192 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH0 SLOAD PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD DUP4 CALLDATALOAD DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x378 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x36E JUMPI JUMPDEST PUSH2 0x347 JUMPI PUSH2 0x1FF DUP2 DUP4 SWAP8 SWAP7 SWAP6 SWAP8 PUSH2 0xB17 JUMP JUMPDEST SWAP6 PUSH2 0x221 PUSH2 0x20C DUP9 PUSH2 0xA04 JUMP JUMPDEST SWAP8 PUSH2 0x219 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x996 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xA04 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x20 DUP11 ADD SWAP8 ADD CALLDATASIZE DUP9 CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x2B2 JUMPI POP POP POP POP POP POP DUP3 MLOAD SWAP4 DUP5 SWAP4 PUSH1 0x20 DUP6 ADD SWAP2 PUSH1 0x20 DUP7 MSTORE MLOAD DUP1 SWAP3 MSTORE DUP5 ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x285 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x276 JUMP JUMPDEST DUP2 DUP2 SWAP11 SWAP9 SWAP10 SWAP11 LT ISZERO PUSH2 0x31C JUMPI PUSH1 0x1 SWAP1 PUSH0 DUP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SLOAD AND PUSH2 0x311 PUSH2 0x30B DUP9 DUP5 PUSH2 0xB17 JUMP JUMPDEST DUP12 PUSH2 0xA1C JUMP JUMPDEST MSTORE ADD SWAP9 SWAP8 SWAP7 SWAP9 PUSH2 0x251 JUMP JUMPDEST DUP4 PUSH1 0x32 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 DUP2 LT ISZERO PUSH2 0x1ED JUMP JUMPDEST POP DUP3 DUP3 GT PUSH2 0x1E6 JUMP JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP2 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x192 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x192 JUMPI DUP1 DUP4 ADD CALLDATALOAD SWAP3 DUP5 DUP5 GT PUSH2 0x192 JUMPI PUSH1 0x24 SWAP2 PUSH1 0x5 SWAP6 CALLDATASIZE DUP5 DUP8 PUSH1 0x5 SHL DUP5 ADD ADD GT PUSH2 0x192 JUMPI PUSH2 0x3DE SWAP7 SWAP6 SWAP7 PUSH2 0xB51 JUMP JUMPDEST PUSH0 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 PUSH32 0x0 AND SWAP8 JUMPDEST DUP10 DUP2 LT PUSH2 0x424 JUMPI STOP JUMPDEST DUP7 DUP2 DUP5 SHL DUP4 ADD ADD CALLDATALOAD DUP6 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x192 JUMPI DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 ADD DUP3 SWAP1 MSTORE DUP13 DUP2 DUP11 DUP2 DUP15 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x65C JUMPI PUSH0 SWAP2 PUSH2 0x62F JUMPI JUMPDEST POP ISZERO PUSH2 0x605 JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 DUP12 DUP2 DUP16 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x5FB JUMPI SWAP2 DUP15 SWAP2 DUP10 SWAP4 PUSH0 SWAP3 PUSH2 0x560 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x536 JUMPI PUSH2 0x4D5 DUP2 PUSH2 0xE3E JUMP JUMPDEST ISZERO PUSH2 0x50C JUMPI SWAP1 PUSH32 0x99B605510FFA7C63C0ABAE2DDB315D152C3780CB7FB860FE267AEEB55AA79C7 DUP13 PUSH1 0x1 SWAP4 DUP12 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x41B JUMP JUMPDEST DUP8 SWAP1 DUP8 PUSH32 0x391DE81200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP8 SWAP1 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP3 POP SWAP3 POP POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5F4 JUMPI JUMPDEST PUSH2 0x57A DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x192 JUMPI DUP11 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x5C9 JUMPI SWAP2 PUSH2 0x5BE DUP16 SWAP3 DUP14 SWAP1 DUP12 SWAP6 DUP3 MSTORE PUSH2 0x5A7 DUP2 PUSH2 0xCC1 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x5B4 DUP6 DUP3 ADD PUSH2 0xCC1 JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0xCC1 JUMP JUMPDEST DUP13 DUP3 ADD MSTORE DUP16 DUP1 PUSH2 0x4C3 JUMP JUMPDEST DUP11 PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x570 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 SWAP1 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x64F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x655 JUMPI JUMPDEST PUSH2 0x647 DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAFF JUMP JUMPDEST DUP14 PUSH2 0x476 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63D JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x192 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x725 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x6F6 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x717 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x71E JUMPI JUMPDEST PUSH2 0x70F DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAD3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6EE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x705 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x192 JUMPI PUSH2 0x7E5 PUSH1 0x20 SWAP3 PUSH2 0xA5D JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x192 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x192 JUMPI DUP3 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x24 SWAP1 PUSH2 0x82F DUP6 PUSH2 0xA04 JUMP JUMPDEST SWAP5 PUSH2 0x83C DUP5 MLOAD SWAP7 DUP8 PUSH2 0x996 JUMP JUMPDEST DUP1 DUP7 MSTORE PUSH1 0x24 PUSH1 0x20 DUP8 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x192 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x904 JUMPI POP POP POP PUSH2 0x86B PUSH2 0xB51 JUMP JUMPDEST DUP4 MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x879 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x898 DUP3 DUP5 PUSH2 0xA1C JUMP JUMPDEST MLOAD AND PUSH2 0x8A3 DUP2 PUSH2 0xD15 JUMP JUMPDEST ISZERO PUSH2 0x8DA JUMPI SWAP1 PUSH32 0x2D6E1422E38CF8B1C4F2314722A67F167A89F205D5109A044F5F8A89EECB45DC DUP9 PUSH1 0x1 SWAP4 DUP8 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x870 JUMP JUMPDEST DUP4 SWAP1 DUP7 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x192 JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0x859 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x963 PUSH2 0x973 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH0 KECCAK256 SLOAD ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x192 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9D7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9D7 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xA30 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9D7 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x192 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x192 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x192 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x192 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0xB24 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB7D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xA5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC94 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xC9F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC94 JUMPI PUSH0 SWAP3 PUSH2 0xC77 JUMPI JUMPDEST POP POP ISZERO PUSH2 0xC4F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xC8D SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x655 JUMPI PUSH2 0x647 DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC46 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xCBA SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x71E JUMPI PUSH2 0x70F DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xBF5 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x192 JUMPI JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0xA30 JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xE38 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 ADD DUP2 DUP2 GT PUSH2 0xB24 JUMPI PUSH0 SLOAD SWAP1 DUP4 DUP3 ADD SWAP2 DUP3 GT PUSH2 0xB24 JUMPI DUP2 DUP2 SUB PUSH2 0xDCF JUMPI JUMPDEST POP POP POP PUSH0 SLOAD DUP1 ISZERO PUSH2 0xDA2 JUMPI DUP2 ADD SWAP1 PUSH2 0xD81 DUP3 PUSH2 0xCE2 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH0 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xE22 PUSH2 0xDDE PUSH2 0xDED SWAP4 PUSH2 0xCE2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 PUSH2 0xCE2 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xD6A JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH0 EQ PUSH2 0xE8E JUMPI PUSH0 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x9D7 JUMPI PUSH2 0xE78 PUSH2 0xDED DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH0 SSTORE PUSH2 0xCE2 JUMP JUMPDEST SWAP1 SSTORE PUSH0 SLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 DUP6 SWAP8 0xF7 0xC6 0xEC 0xDA DELEGATECALL PUSH27 0x51574913EF7F516D2D82E20B157A5E6D2FC9FCC981594F64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"332:1196:67:-:0;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;-1:-1:-1;;;;;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;332:1196:67;;;;;;;922:4:45;1347:46:33;;943:28:43;939:79;;1028:14;;332:1196:67;;;;;;;;1347:46:33;332:1196:67;;;;;1028:14:43;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;;;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;332:1196:67;-1:-1:-1;332:1196:67;;;;;;-1:-1:-1;332:1196:67;;;;;-1:-1:-1;332:1196:67"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2419,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":3265,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2815,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2771,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":2564,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2839,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2454,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":3646,"id":12079,"parameterSlots":1,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":2897,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":2653,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_remove":{"entryPoint":3349,"id":12163,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_address_dyn":{"entryPoint":2588,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":3298,"id":null,"parameterSlots":1,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":2696}],"6692":[{"length":32,"start":209},{"length":32,"start":1017},{"length":32,"start":1722},{"length":32,"start":1912},{"length":32,"start":3011}]},"linkReferences":{},"object":"6080604081815260049081361015610015575f80fd5b5f925f3560e01c9081631246dbf514610930575080634b164140146107ec578063851c1bb31461079c5780638d928af81461074c5780638eec5d701461072f578063aaabadc514610666578063b36a4ab114610381578063bbe95837146101c15763d15126ba14610084575f80fd5b3461019257806003193601126101925761009c610973565b916100a5610b51565b73ffffffffffffffffffffffffffffffffffffffff80931692835f526001602052825f205415610196577f00000000000000000000000000000000000000000000000000000000000000001692833b15610192575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561018857610145578380f35b9091925067ffffffffffffffff831161015c575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b83827f79ff313f000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101925781600319360112610192575f54602490813583358181118015610378575b801561036e575b610347576101ff818397969597610b17565b9561022161020c88610a04565b976102198851998a610996565b808952610a04565b946020947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208a019701368837835b8581106102b257505050505050825193849360208501916020865251809252840192915f5b82811061028557505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610276565b81819a98999a101561031c576001905f805273ffffffffffffffffffffffffffffffffffffffff817f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301541661031161030b8884610b17565b8b610a1c565b520198979698610251565b836032847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847f4e23d035000000000000000000000000000000000000000000000000000000005f525ffd5b50828110156101ed565b508282116101e6565b503461019257602091826003193601126101925767ffffffffffffffff91813583811161019257366023820112156101925780830135928484116101925760249160059536848760051b84010111610192576103de969596610b51565b5f9573ffffffffffffffffffffffffffffffffffffffff92837f000000000000000000000000000000000000000000000000000000000000000016975b89811061042457005b8681841b830101358581168091036101925788517fc673bdaf0000000000000000000000000000000000000000000000000000000081528781018290528c818a818e5afa90811561065c575f9161062f575b50156106055788517fe9ddeb26000000000000000000000000000000000000000000000000000000008152878101829052606080828b818f5afa9182156105fb57918e9189935f92610560575b5050015116610536576104d581610e3e565b1561050c57907f099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c78c6001938b51908152a10161041b565b8790877f391de812000000000000000000000000000000000000000000000000000000005f52525ffd5b8790877ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b92509250508181813d83116105f4575b61057a8183610996565b81010312610192578a51918201828110888211176105c957916105be8f928d908b9582526105a781610cc1565b84526105b4858201610cc1565b8585015201610cc1565b8c8201528f806104c3565b8a60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b503d610570565b8b513d5f823e3d90fd5b8790877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b61064f91508d803d10610655575b6106478183610996565b810190610aff565b8d610476565b503d61063d565b8a513d5f823e3d90fd5b509034610192575f6003193601126101925773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561072557926020935f936106f6575b505191168152f35b610717919350843d861161071e575b61070f8183610996565b810190610ad3565b91846106ee565b503d610705565b83513d5f823e3d90fd5b5034610192575f600319360112610192576020905f549051908152f35b5034610192575f600319360112610192576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101925760206003193601126101925735907fffffffff0000000000000000000000000000000000000000000000000000000082168203610192576107e5602092610a5d565b9051908152f35b50346101925760209160206003193601126101925780359167ffffffffffffffff8311610192573660238401121561019257828201359260249061082f85610a04565b9461083c84519687610996565b8086526024602087019160051b8301019136831161019257602401905b8282106109045750505061086b610b51565b8351935f5b85811061087957005b73ffffffffffffffffffffffffffffffffffffffff6108988284610a1c565b51166108a381610d15565b156108da57907f2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc886001938751908152a101610870565b8390867f79ff313f000000000000000000000000000000000000000000000000000000005f52525ffd5b813573ffffffffffffffffffffffffffffffffffffffff81168103610192578152908701908701610859565b9050346101925760206003193601126101925760209173ffffffffffffffffffffffffffffffffffffffff610963610973565b165f52600183525f205415158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109d757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109d75760051b60200190565b8051821015610a305760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176109d75760405251902090565b90816020910312610192575173ffffffffffffffffffffffffffffffffffffffff811681036101925790565b90816020910312610192575180151581036101925790565b91908203918211610b2457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610b7d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610a5d565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c945784925f92610c9f575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610c94575f92610c77575b505015610c4f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b610c8d9250803d10610655576106478183610996565b5f80610c46565b6040513d5f823e3d90fd5b6064919250610cba90843d861161071e5761070f8183610996565b9190610bf5565b519073ffffffffffffffffffffffffffffffffffffffff8216820361019257565b5f54811015610a30575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b5f818152600160205260409020548015610e38577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90818101818111610b24575f5490838201918211610b2457818103610dcf575b5050505f548015610da257810190610d8182610ce2565b909182549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610e22610dde610ded93610ce2565b90549060031b1c928392610ce2565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080610d6a565b50505f90565b805f52600160205260405f2054155f14610e8e575f54680100000000000000008110156109d757610e78610ded8260018594015f55610ce2565b90555f54905f52600160205260405f2055600190565b505f9056fea2646970667358221220a58597f7c6ecdaf47a51574913ef7f516d2d82e20b157a5e6d2fc9fcc981594f64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1246DBF5 EQ PUSH2 0x930 JUMPI POP DUP1 PUSH4 0x4B164140 EQ PUSH2 0x7EC JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x79C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x74C JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x72F JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0xB36A4AB1 EQ PUSH2 0x381 JUMPI DUP1 PUSH4 0xBBE95837 EQ PUSH2 0x1C1 JUMPI PUSH4 0xD15126BA EQ PUSH2 0x84 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x192 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH2 0x9C PUSH2 0x973 JUMP JUMPDEST SWAP2 PUSH2 0xA5 PUSH2 0xB51 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SLOAD ISZERO PUSH2 0x196 JUMPI PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x192 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x188 JUMPI PUSH2 0x145 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x15C JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP4 DUP3 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x192 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH0 SLOAD PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD DUP4 CALLDATALOAD DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x378 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x36E JUMPI JUMPDEST PUSH2 0x347 JUMPI PUSH2 0x1FF DUP2 DUP4 SWAP8 SWAP7 SWAP6 SWAP8 PUSH2 0xB17 JUMP JUMPDEST SWAP6 PUSH2 0x221 PUSH2 0x20C DUP9 PUSH2 0xA04 JUMP JUMPDEST SWAP8 PUSH2 0x219 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x996 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xA04 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x20 DUP11 ADD SWAP8 ADD CALLDATASIZE DUP9 CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x2B2 JUMPI POP POP POP POP POP POP DUP3 MLOAD SWAP4 DUP5 SWAP4 PUSH1 0x20 DUP6 ADD SWAP2 PUSH1 0x20 DUP7 MSTORE MLOAD DUP1 SWAP3 MSTORE DUP5 ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x285 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x276 JUMP JUMPDEST DUP2 DUP2 SWAP11 SWAP9 SWAP10 SWAP11 LT ISZERO PUSH2 0x31C JUMPI PUSH1 0x1 SWAP1 PUSH0 DUP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SLOAD AND PUSH2 0x311 PUSH2 0x30B DUP9 DUP5 PUSH2 0xB17 JUMP JUMPDEST DUP12 PUSH2 0xA1C JUMP JUMPDEST MSTORE ADD SWAP9 SWAP8 SWAP7 SWAP9 PUSH2 0x251 JUMP JUMPDEST DUP4 PUSH1 0x32 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 DUP2 LT ISZERO PUSH2 0x1ED JUMP JUMPDEST POP DUP3 DUP3 GT PUSH2 0x1E6 JUMP JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP2 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x192 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x192 JUMPI DUP1 DUP4 ADD CALLDATALOAD SWAP3 DUP5 DUP5 GT PUSH2 0x192 JUMPI PUSH1 0x24 SWAP2 PUSH1 0x5 SWAP6 CALLDATASIZE DUP5 DUP8 PUSH1 0x5 SHL DUP5 ADD ADD GT PUSH2 0x192 JUMPI PUSH2 0x3DE SWAP7 SWAP6 SWAP7 PUSH2 0xB51 JUMP JUMPDEST PUSH0 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 PUSH32 0x0 AND SWAP8 JUMPDEST DUP10 DUP2 LT PUSH2 0x424 JUMPI STOP JUMPDEST DUP7 DUP2 DUP5 SHL DUP4 ADD ADD CALLDATALOAD DUP6 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x192 JUMPI DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 ADD DUP3 SWAP1 MSTORE DUP13 DUP2 DUP11 DUP2 DUP15 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x65C JUMPI PUSH0 SWAP2 PUSH2 0x62F JUMPI JUMPDEST POP ISZERO PUSH2 0x605 JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 DUP12 DUP2 DUP16 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x5FB JUMPI SWAP2 DUP15 SWAP2 DUP10 SWAP4 PUSH0 SWAP3 PUSH2 0x560 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x536 JUMPI PUSH2 0x4D5 DUP2 PUSH2 0xE3E JUMP JUMPDEST ISZERO PUSH2 0x50C JUMPI SWAP1 PUSH32 0x99B605510FFA7C63C0ABAE2DDB315D152C3780CB7FB860FE267AEEB55AA79C7 DUP13 PUSH1 0x1 SWAP4 DUP12 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x41B JUMP JUMPDEST DUP8 SWAP1 DUP8 PUSH32 0x391DE81200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP8 SWAP1 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP3 POP SWAP3 POP POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5F4 JUMPI JUMPDEST PUSH2 0x57A DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x192 JUMPI DUP11 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x5C9 JUMPI SWAP2 PUSH2 0x5BE DUP16 SWAP3 DUP14 SWAP1 DUP12 SWAP6 DUP3 MSTORE PUSH2 0x5A7 DUP2 PUSH2 0xCC1 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x5B4 DUP6 DUP3 ADD PUSH2 0xCC1 JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0xCC1 JUMP JUMPDEST DUP13 DUP3 ADD MSTORE DUP16 DUP1 PUSH2 0x4C3 JUMP JUMPDEST DUP11 PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x570 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 SWAP1 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x64F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x655 JUMPI JUMPDEST PUSH2 0x647 DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAFF JUMP JUMPDEST DUP14 PUSH2 0x476 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63D JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x192 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x725 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x6F6 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x717 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x71E JUMPI JUMPDEST PUSH2 0x70F DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAD3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6EE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x705 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x192 JUMPI PUSH2 0x7E5 PUSH1 0x20 SWAP3 PUSH2 0xA5D JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x192 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x192 JUMPI DUP3 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x24 SWAP1 PUSH2 0x82F DUP6 PUSH2 0xA04 JUMP JUMPDEST SWAP5 PUSH2 0x83C DUP5 MLOAD SWAP7 DUP8 PUSH2 0x996 JUMP JUMPDEST DUP1 DUP7 MSTORE PUSH1 0x24 PUSH1 0x20 DUP8 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x192 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x904 JUMPI POP POP POP PUSH2 0x86B PUSH2 0xB51 JUMP JUMPDEST DUP4 MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x879 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x898 DUP3 DUP5 PUSH2 0xA1C JUMP JUMPDEST MLOAD AND PUSH2 0x8A3 DUP2 PUSH2 0xD15 JUMP JUMPDEST ISZERO PUSH2 0x8DA JUMPI SWAP1 PUSH32 0x2D6E1422E38CF8B1C4F2314722A67F167A89F205D5109A044F5F8A89EECB45DC DUP9 PUSH1 0x1 SWAP4 DUP8 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x870 JUMP JUMPDEST DUP4 SWAP1 DUP7 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x192 JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0x859 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x192 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x192 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x963 PUSH2 0x973 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH0 KECCAK256 SLOAD ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x192 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9D7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9D7 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xA30 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9D7 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x192 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x192 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x192 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x192 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0xB24 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB7D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xA5D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC94 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xC9F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC94 JUMPI PUSH0 SWAP3 PUSH2 0xC77 JUMPI JUMPDEST POP POP ISZERO PUSH2 0xC4F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xC8D SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x655 JUMPI PUSH2 0x647 DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC46 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xCBA SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x71E JUMPI PUSH2 0x70F DUP2 DUP4 PUSH2 0x996 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xBF5 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x192 JUMPI JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0xA30 JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xE38 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 ADD DUP2 DUP2 GT PUSH2 0xB24 JUMPI PUSH0 SLOAD SWAP1 DUP4 DUP3 ADD SWAP2 DUP3 GT PUSH2 0xB24 JUMPI DUP2 DUP2 SUB PUSH2 0xDCF JUMPI JUMPDEST POP POP POP PUSH0 SLOAD DUP1 ISZERO PUSH2 0xDA2 JUMPI DUP2 ADD SWAP1 PUSH2 0xD81 DUP3 PUSH2 0xCE2 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH0 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xE22 PUSH2 0xDDE PUSH2 0xDED SWAP4 PUSH2 0xCE2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 PUSH2 0xCE2 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xD6A JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH0 EQ PUSH2 0xE8E JUMPI PUSH0 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x9D7 JUMPI PUSH2 0xE78 PUSH2 0xDED DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH0 SSTORE PUSH2 0xCE2 JUMP JUMPDEST SWAP1 SSTORE PUSH0 SLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 DUP6 SWAP8 0xF7 0xC6 0xEC 0xDA DELEGATECALL PUSH27 0x51574913EF7F516D2D82E20B157A5E6D2FC9FCC981594F64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"332:1196:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;332:1196:67;1424:26:45;;;332:1196:67;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;:::i;:::-;1525:73:33;;;:::i;:::-;332:1196:67;;;;;;;;;;;;;;;4360:26:60;3532:86:65;;1124:6:43;332:1196:67;916:62;;;;;;332:1196;;;;;;;916:62;;;;;332:1196;916:62;;;;;332:1196;;;;;;;916:62;;;;;;;;332:1196;;;916:62;332:1196;;;;;;;;;-1:-1:-1;332:1196:67;;;;;;;;;;;;916:62;332:1196;;;;;;;;;916:62;332:1196;;;3532:86:65;3589:18;;;332:1196:67;3589:18:65;332:1196:67;;;3589:18:65;332:1196:67;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;;;;;2965:9:65;;;:28;;;;332:1196:67;2965:50:65;;;;332:1196:67;2961:106:65;;3099:9;;;;;;;;:::i;:::-;332:1196:67;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;3124:16:65;3142:6;;;;;;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;332:1196:67;;;;;;;;;;;;3150:3:65;332:1196:67;;;;;;;;;;;;;;;;;;;;;3169:30:65;3175:8;;;;:::i;:::-;3169:30;;:::i;:::-;332:1196:67;;3124:16:65;;;;;;332:1196:67;;;;;;;;;;2961:106:65;3038:18;;332:1196:67;3038:18:65;332:1196:67;3038:18:65;2965:50;2997:18;;;;;2965:50;;:28;2978:15;;;;2965:28;;332:1196:67;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;;;:::i;:::-;332:1196:67;;;1124:6:43;;;332:1196:67;1305:536:65;1325:10;;;;;;332:1196:67;1337:3:65;332:1196:67;;;;;;;;;;;;;;;;;;;1452:33:65;;;;;332:1196:67;;;;;;;;1452:33:65;;;;;;;332:1196:67;1452:33:65;;;1337:3;332:1196:67;;1448:124:65;;332:1196:67;;;1397:36;;;;;332:1196;;;1397:36;;332:1196;1397:36;332:1196;1397:36;;;;;;;;;;;;;332:1196;1397:36;;;1337:3:65;1397:51:67;;;332:1196;;1393:127;;8409:50:60;;;:::i;:::-;332:1196:67;1698:93:65;;332:1196:67;1810:20:65;332:1196:67;;;;;;;;1810:20:65;332:1196:67;1310:13:65;;1698:93;1754:22;;;;332:1196:67;1754:22:65;332:1196:67;;1754:22:65;1393:127:67;1485:24;;;;332:1196;1485:24;332:1196;;1485:24;1397:36;;;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1397:36;;;;332:1196;;;;;;;;;;1397:36;;;;;;332:1196;;;;;;;;;1448:124:65;1521:36;;;;332:1196:67;1521:36:65;332:1196:67;;1521:36:65;1452:33;;;;;;;-1:-1:-1;1452:33:65;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;332:1196:67;;;;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;1424:26:45;332:1196:67;;1424:26:45;;332:1196:67;1424:26:45;;1124:6:43;;;332:1196:67;1424:26:45;;;;;;;;;;332:1196:67;1424:26:45;;;332:1196:67;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;332:1196:67;;;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;1124:6:43;332:1196:67;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;;;:::i;:::-;332:1196:67;;2010:13:65;332:1196:67;2025:10:65;;;;;;332:1196:67;2037:3:65;332:1196:67;2071:8:65;;;;:::i;:::-;332:1196:67;;8730:53:60;;;:::i;:::-;332:1196:67;2093:92:65;;332:1196:67;2204:24:65;332:1196:67;;;;;;;;2204:24:65;332:1196:67;2010:13:65;;2093:92;2152:18;;;;332:1196:67;2152:18:65;332:1196:67;;2152:18:65;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1196:67;;;;;;;;;;:::i;:::-;;;;4360:14:60;332:1196:67;;;;;4360:26:60;;332:1196:67;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;332:1196:67;;;2303:50:33;;;2320:22;;332:1196:67;;;;;;;2303:50:33;;;332:1196:67;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;332:1196:67:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;1688:201:33;1762:20;1774:7;;;;1762:20;:::i;:::-;332:1196:67;;;;1336:22:43;;;:6;;;:22;:6;;;332:1196:67;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;332:1196:67;;;;;1336:64:43;;;;;332:1196:67;1336:64:43;;:22;:64;;332:1196:67;1820:10:33;332:1196:67;;;;1394:4:43;332:1196:67;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:43;1774:7:33;1854:18;1336:64:43;;;;;;-1:-1:-1;1336:64:43;;;;;;:::i;:::-;;;;;;332:1196:67;;;1774:7:33;332:1196:67;;;;;1336:22:43;332:1196:67;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;332:1196:67;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;2815:1368:60:-;332:1196:67;;;;3010:14:60;332:1196:67;;;;;;3046:13:60;;;;332:1196:67;;;;;;;;;;;;;;;;;;;;;3521:23:60;;;3517:378;;3042:1135;332:1196:67;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3010:14:60;332:1196:67;;;;;;;3010:14:60;4112:11;:::o;332:1196:67:-;;;;;;;;;;3517:378:60;332:1196:67;3584:22:60;3705:23;3584:22;;:::i;:::-;332:1196:67;;;;;;3705:23:60;;;;:::i;:::-;332:1196:67;;;;;;;;;;;;;;;;;;;;;;;;3010:14:60;332:1196:67;;;;;;3517:378:60;;;;;3042:1135;4154:12;;332:1196:67;4154:12:60;:::o;2241:406::-;332:1196:67;;;4360:14:60;332:1196:67;;;;;;4360:26:60;2320:321;332:1196:67;;;;;;;;;;;;;;4360:14:60;332:1196:67;;;;;;:::i;:::-;;;;;;;;4360:14:60;332:1196:67;;;;;;4360:14:60;2576:11;:::o;2320:321::-;2618:12;332:1196:67;2618:12:60;:::o"},"methodIdentifiers":{"addPools(address[])":"b36a4ab1","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPoolCount()":"8eec5d70","getPools(uint256,uint256)":"bbe95837","getVault()":"8d928af8","hasPool(address)":"1246dbf5","removePools(address[])":"4b164140","setStaticSwapFeePercentage(address,uint256)":"d15126ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"hasPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PoolAlreadyInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being removed\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was added\"}},\"PoolRemovedFromSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was removed\"}}},\"kind\":\"dev\",\"methods\":{\"addPools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add pools to the set.\",\"params\":{\"newPools\":\"List of pools to add\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getPoolCount()\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction.\",\"returns\":{\"_0\":\"poolCount The current number of pools in the set\"}},\"getPools(uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\",\"params\":{\"from\":\"Start index\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"hasPool(address)\":{\"params\":{\"pool\":\"Pool to check\"},\"returns\":{\"_0\":\"isPausable True if the pool is in the set, false otherwise\"}},\"removePools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove pools from the set.\",\"params\":{\"pools\":\"List of pools to remove\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"PoolAlreadyInSet(address)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}],\"PoolNotInSet(address)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"notice\":\"Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\"},\"PoolRemovedFromSet(address)\":{\"notice\":\"Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\"}},\"kind\":\"user\",\"methods\":{\"addPools(address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getPoolCount()\":{\"notice\":\"Get the number of pools.\"},\"getPools(uint256,uint256)\":{\"notice\":\"Get a range of pools.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"hasPool(address)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"removePools(address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolSwapFeeHelper.sol\":\"PoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xc69ed5b725cd2b877ac74ee7288639d86297ca434418753833758611898d2018\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37b1b0fb636a1e35cf45a709cf87883b95abf66daf1b374456ceb2bc3f5fea08\",\"dweb:/ipfs/QmbcNhkXd5urdbC7SpD2CKVNuWYMHmca3oiTUPWhqoudZe\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x661784fa00ecc7842f0468d6c69d4f238b6fdf582a9d54042b682556b05a80d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ed5e9f2b41125d98ca74db929ff4880f6303bd560d95a4f7d51ea5ed80f7f789\",\"dweb:/ipfs/QmPzF4iWYDUURUTDWdoGYBkQs81RjDBZEKEubWTYFNijbX\"]},\"contracts/PoolSwapFeeHelper.sol\":{\"keccak256\":\"0xbcdd1d376ae6a4725287d2dc1043da5cffe8242ac0291c192715d0300fae1499\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9ba64850bd16249fe6ee1f978eae9d03c813c12ce470d606336b285f8fb0a1f6\",\"dweb:/ipfs/QmSFdGRRJF8qVpvYETAJtDY4ea3JoHa71QuRmgUcLSutQZ\"]}},\"version\":1}"}},"contracts/PriceImpactHelper.sol":{"PriceImpactHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6111fb38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161114890816100b38239608051816104b1015260a05181818161030201528181610735015281816108e40152610cd70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212202bb84b559d38914c8d1879c59c498c5b8acdec53c92d89540cf679e9b7fde98c64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x11FB CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1148 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4B1 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x302 ADD MSTORE DUP2 DUP2 PUSH2 0x735 ADD MSTORE DUP2 DUP2 PUSH2 0x8E4 ADD MSTORE PUSH2 0xCD7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB8 0x4B SSTORE SWAP14 CODESIZE SWAP2 0x4C DUP14 XOR PUSH26 0xC59C498C5B8ACDEC53C92D89540CF679E9B7FDE98C64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"537:8700:68:-:0;;;;;;;;;;;;;-1:-1:-1;;537:8700:68;;;;-1:-1:-1;;;;;537:8700:68;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;537:8700:68;;;;;;;;;;;;;;;;;;779:14;;803:16;;537:8700;;;;;;;;779:14;537:8700;;;;;803:16;537:8700;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:68;;;;;;-1:-1:-1;537:8700:68;;;;;-1:-1:-1;537:8700:68"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2735,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":3062,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":2857,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2805,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2829,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":3015,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":2770,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":3699,"id":4581,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":3867,"id":13245,"parameterSlots":2,"returnSlots":1},"fun_parseSelector":{"entryPoint":3643,"id":4563,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3099,"id":14974,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3446,"id":15171,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3361,"id":12025,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":3590,"id":11189,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":3714,"id":10196,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":2906,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2971,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"14780":[{"length":32,"start":1201}],"14783":[{"length":32,"start":770},{"length":32,"start":1845},{"length":32,"start":2276},{"length":32,"start":3287}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212202bb84b559d38914c8d1879c59c498c5b8acdec53c92d89540cf679e9b7fde98c64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB8 0x4B SSTORE SWAP14 CODESIZE SWAP2 0x4C DUP14 XOR PUSH26 0xC59C498C5B8ACDEC53C92D89540CF679E9B7FDE98C64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"537:8700:68:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:62;;;;;;:::i;:::-;840:718;;;;;990:10;955:63;990:10;537:8700:68;990:10:62;;955:63;:::i;:::-;;537:8700:68;;1084:26:62;;;;;;537:8700:68;;1084:26:62;;537:8700:68;;;;;;:::i;:::-;1084:26:62;;;840:718;1276:33;1344:27;537:8700:68;1276:33:62;;;:::i;:::-;537:8700:68;1327:44:62;1540:6;1323:110;1398:20;537:8700:68;1398:20:62;537:8700:68;;1398:20:62;537:8700:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1265:58;537:8700;;1265:58;;;:::i;:::-;537:8700;;;3717:247;537:8700;;3717:247;;;537:8700;;;3717:247;;537:8700;3717:247;;537:8700;;;;;;;;;;;;;;;;;;;;3717:247;;537:8700;;;;;;;;;;;;;3643:339;537:8700;;;;3687:7;537:8700;3643:339;:::i;:::-;537:8700;;;3615:410;;;537:8700;3615:410;;;;537:8700;;;;;;3615:410;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:35;537:8700;;1544:35;:::i;:::-;1594:13;537:8700;1636:3;537:8700;;1609:25;;;;;1667:36;:25;;;;:::i;:::-;537:8700;1667:36;:::i;:::-;1706:17;:28;:17;;;;:::i;:28::-;537:8700;;;;;;;;;;;;;;;;;;;;;;1655:79;;;;;:::i;:::-;537:8700;;1594:13;;537:8700;;;;;;;;;;1609:25;;;;;;1890:35;537:8700;;1890:35;:::i;:::-;1940:13;537:8700;1982:3;537:8700;;1955:25;;;;;537:8700;;2016:67;537:8700;;2016:67;;;;:::i;:::-;2001:82;;;;:::i;:::-;537:8700;;1940:13;;1955:25;;;;;;537:8700;;;;6588:26;537:8700;6588:26;;537:8700;6588:26;;537:8700;;6588:6;537:8700;6588:6;537:8700;6588:6;537:8700;6588:26;;;;;;;537:8700;6588:26;;;1935:159;6630:13;;;;537:8700;6625:1710;6668:3;537:8700;;;;;;;;;;6645:21;;;;;6786:28;537:8700;8586:29;8599:16;8630:13;537:8700;8663:3;537:8700;;8645:16;;;;;537:8700;8686:8;;;;:::i;:::-;537:8700;8686:12;:30;;;8663:3;8682:110;;8663:3;537:8700;;8630:13;;8682:110;8742:8;;;;;;;;;:::i;:::-;537:8700;;8768:9;8682:110;;8686:30;8702:8;;;;;;:::i;:::-;537:8700;8702:14;8686:30;;8645:16;;;;;;;;537:8700;9013:29;9026:16;9057:13;537:8700;9090:3;537:8700;;9072:16;;;;;537:8700;9113:8;;;;:::i;:::-;537:8700;9113:12;:30;;;9090:3;9109:110;;9090:3;537:8700;;9057:13;;9109:110;9169:8;;;;;;;;;:::i;:::-;537:8700;;9195:9;9109:110;;9113:30;9129:8;;;;;;:::i;:::-;537:8700;9129:14;9113:30;;9072:16;;;;;;;;6828:52;6895:23;7009:32;;;;:::i;:::-;537:8700;7044:33;7045:32;;;;:::i;:::-;537:8700;7044:33;:::i;:::-;-1:-1:-1;7045:32:68;;;4287:397;7097:39;4361:305;7097:39;4361:305;7402:35;:23;7097:39;537:8700;7352:28;7154:40;7303:27;;;;;:::i;:::-;537:8700;;7352:28;;:::i;:::-;537:8700;;7402:23;;:::i;:::-;537:8700;7402:35;:::i;:::-;537:8700;;;4361:305;;;537:8700;;4361:305;;;537:8700;;4361:305;;537:8700;4361:305;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4361:305;;-1:-1:-1;;4361:305:68;;;;;;:::i;:::-;537:8700;3687:7;537:8700;4287:397;:::i;:::-;537:8700;;;;4259:466;;537:8700;;;;;8025:30;4259:466;;7984:27;8097:23;4259:466;537:8700;4259:466;;;537:8700;7005:922;7984:27;:::i;:::-;537:8700;8025:30;;:::i;:::-;537:8700;8097:23;:::i;:::-;8069:51;;;;;:::i;:::-;537:8700;;;;;;;;;;;;;;;;;;;;;;8069:51;;;;;:::i;:::-;537:8700;8134:190;8164:160;537:8700;;8164:160;;;;:::i;:::-;8134:190;;;:::i;:::-;537:8700;;6630:13;;;;;7005:922;7522:39;;7729:28;7522:39;7729:28;;:::i;:::-;537:8700;;;7779:27;;;;;;:::i;:::-;537:8700;;;7830:23;;;;;:::i;:::-;537:8700;7829:24;;;:::i;:::-;7828:38;;;:::i;:::-;537:8700;;;;5063:307;;;537:8700;;;;;5063:307;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:68;;;;;;;;5063:307;;;537:8700;;5063:307;:::i;:::-;4989:399;;537:8700;3687:7;537:8700;4989:399;:::i;:::-;537:8700;;;4961:468;;537:8700;;-1:-1:-1;537:8700:68;;;8025:30;4961:468;;7984:27;8097:23;4961:468;537:8700;4961:468;;;537:8700;7005:922;7984:27;:::i;6645:21::-;2549:35;6645:21;2476:42;2477:28;2478:27;6645:21;;;2478:27;:::i;2477:28::-;2476:42;:::i;:::-;2549:35;;:::i;:::-;537:8700;465:4:38;;;;;;;;;;;;;;;;;537:8700:68;;;;;;;;;;;;;;;;;;;;;;;;;6588:26;;;;;;;537:8700;6588:26;;;;;;:::i;:::-;;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:26;;;;;;;;537:8700;;;;;;;;;;;;;;;;;;;;6588:26;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;537:8700:68;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;537:8700:68;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;537:8700:68;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;537:8700:68;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;537:8700:68;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:68;;;;;;;;;;;:::o;2820:599::-;;;;537:8700;;;3109:244;;;537:8700;3109:244;;;;537:8700;;;;;;3109:244;;;537:8700;;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:68;;;;;;;;;;3035:336;537:8700;;;;3109:244;537:8700;;;;;;-1:-1:-1;537:8700:68;;;;;;;;;;;;3109:244;;;;;;:::i;:::-;3079:7;537:8700;3035:336;:::i;:::-;537:8700;;;;3007:405;;537:8700;;;;3007:405;537:8700;2820:599;:::o;537:8700::-;;;;;;;;;;;;;;;;;34375:314:59;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;537:8700:68;;34608:34:59;;5657:602:68;;;;5950:18;537:8700;;;;-1:-1:-1;;537:8700:68;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;5950:18;:::i;:::-;537:8700;5983:10;;;5979:49;;6141:64;6081:9;6038:70;537:8700;6081:9;;:26;;;;;;;;6038:70;;:::i;:::-;537:8700;6141:64;:::i;:::-;6224:28;;;;5657:602;:::o;6224:28::-;6245:7;;;:::i;:::-;5657:602;:::o;6081:26::-;6101:6;;;:::i;:::-;6081:26;;;5979:49;6009:8;;;;;537:8700;6009:8;:::o;17166:193:59:-;17253:1;17245:9;;17241:81;;17166:193;:::o;17241:81::-;17277:34;17253:1;17277:34;;537:8700:68;;17253:1:59;17277:34;1336:351:36;1463:1;537:8700:68;;1443:21:36;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;537:8700:68;;1881:21:36;:17;;2008:160;;;;;;4625:582:56;;4797:8;;-1:-1:-1;537:8700:68;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;537:8700:68;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;537:8700:68;5121:24:56;;5066:1;5121:24;537:8700:68;5121:24:56;537:8700:68;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;;303:324:62;;430:4;408:60;;;;;537:8700:68;;;;408:60:62;;;;537:8700:68;408:60:62;;537:8700:68;408:60:62;537:8700:68;;408:60:62;;;537:8700:68;;;;;;;;;;;:::i;:::-;408:60:62;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:62;;523:98;;:::i;:::-;720:36:36;787:15;537:8700:68;720:36:36;;;:::i;:::-;537:8700:68;770:32:36;766:185;;537:8700:68;;1013:179:36;1209:30;1013:179;;;;;408:60:62;1013:179:36;;;1209:30;;;;;;;537:8700:68;;;;;;;1209:30:36;;537:8700:68;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:36;537:8700:68;;;;;;;;;;565:45:62;:::o;537:8700:68:-;;;;;;;;766:185:36;930:9;;:::i;404:217:62:-;537:8700:68;;;483:28:62;;;537:8700:68;408:60:62;483:28;;537:8700:68;;;;;;;;;;;483:28:62;408:60;537:8700:68;;;;;;;;;;408:60:62;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PriceImpactHelper.sol\":\"PriceImpactHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x39a5cd3ee5c0bab644f068ad8ba617a0cf71a91610693b1c93c9536464151ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6a5f61af5cda44d8ef95e610c0b418f2cfb984e9c47a58fb1fa8c8bc949def75\",\"dweb:/ipfs/Qmby1D2D5Ym44jgBTTM8eTGnmNGCCKrb8ujpkhVPE6C6Cr\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0xc7a235e866cb76517b3e21a399fffcaab048f41c370e38123e52f9369d071b38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b71a034acf450b2b356a80e5f7cbe62137ba4702891a8e174b558d91180ade8a\",\"dweb:/ipfs/QmU5hLqocw2S1vXgmwd756CVwbG3yySQJe1ipbAJjRbPCU\"]}},\"version\":1}"}},"contracts/ProtocolFeeHelper.sol":{"ProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"PoolRemovedFromSet","type":"event"},{"inputs":[{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"hasPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100a857601f61101b38819003918201601f19168301916001600160401b038311848410176100ac578084926020946040528339810103126100a857516001600160a01b0381168082036100a85730608052156100995760a052604051610f5a90816100c1823960805181610a33015260a0518181816103bf015281816106510152818161070f01528181610b6e0152610d050152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040818152600480361015610014575f80fd5b5f925f3560e01c9081631246dbf5146108c7575080634b16414014610782578063851c1bb3146107335780638d928af8146106e35780638eec5d70146106c6578063aaabadc5146105fe578063abaa335614610520578063b36a4ab114610346578063bbe95837146101765763fd267f391461008e575f80fd5b8291346101725780600319360112610172576100a861090a565b6100b181610c6c565b6100b9610afc565b73ffffffffffffffffffffffffffffffffffffffff6100d6610cc2565b1692833b1561016e5761013f9385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561016557506101525750f35b61015b9061092d565b6101625780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b508290346103425782600319360112610342578035906024926024358154818511908115610338575b811561032d575b5061030757859184826101ba828995610ac2565b916101dc6101c7846109af565b936101d48851958661096e565b8085526109af565b946020977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020860197013688375f54835b85811061026e57505050505050835194859460208601926020875251809352850193925b82811061024157505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610232565b81819b9897999a9b10156102dc576001905f805273ffffffffffffffffffffffffffffffffffffffff817f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630154166102cf6102c98884610ac2565b8c6109c7565b520199989795969961020e565b836032847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b507f4e23d035000000000000000000000000000000000000000000000000000000008152fd5b9050841015876101a6565b808311915061019f565b5080fd5b50903461051c5760209160206003193601126105185780359167ffffffffffffffff9182841161051457366023850112156105145783810135928311610514576024906005933660248260051b8801011161051057946103a4610afc565b879073ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016925b8881106103ec578a80f35b8581831b8401013588811680910361050c5787517fc673bdaf00000000000000000000000000000000000000000000000000000000815281878201528b818981895afa908115610502578d916104d5575b50156104ac5761044c81610ecf565b1561048357907f099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c78b6001938a51908152a1016103e1565b7f391de812000000000000000000000000000000000000000000000000000000008c528552858bfd5b7f9e51bd5c000000000000000000000000000000000000000000000000000000008c528552858bfd5b6104f591508c8d3d106104fb575b6104ed818361096e565b810190610aaa565b5f61043d565b503d6104e3565b89513d8f823e3d90fd5b8b80fd5b8780fd5b8580fd5b8380fd5b8280fd5b5090346105fa57806003193601126105fa5761053a61090a565b61054381610c6c565b61054b610afc565b73ffffffffffffffffffffffffffffffffffffffff610568610cc2565b1692833b156105fa576105d1935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156105f157506105e5575080f35b6105ef915061092d565b005b513d5f823e3d90fd5b5f80fd5b50346105fa575f6003193601126105fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156106bc57926020935f9361068d575b505191168152f35b6106ae919350843d86116106b5575b6106a6818361096e565b810190610a7e565b9184610685565b503d61069c565b83513d5f823e3d90fd5b82346105fa575f6003193601126105fa576020905f549051908152f35b82346105fa575f6003193601126105fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346105fa5760206003193601126105fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036105fa5761077b602092610a08565b9051908152f35b5090346105fa5760209160206003193601126105fa5780359167ffffffffffffffff83116105fa57366023840112156105fa5782820135926024906107c6856109af565b946107d38451968761096e565b8086526024602087019160051b830101913683116105fa57602401905b82821061089b57505050610802610afc565b8351935f5b85811061081057005b73ffffffffffffffffffffffffffffffffffffffff61082f82846109c7565b511661083a81610da6565b1561087157907f2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc886001938751908152a101610807565b8390867f79ff313f000000000000000000000000000000000000000000000000000000005f52525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036105fa5781529087019087016107f0565b8390346105fa5760206003193601126105fa5760209173ffffffffffffffffffffffffffffffffffffffff6108fa61090a565b165f52600183525f205415158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036105fa57565b67ffffffffffffffff811161094157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761094157604052565b67ffffffffffffffff81116109415760051b60200190565b80518210156109db5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176109415760405251902090565b908160209103126105fa575173ffffffffffffffffffffffffffffffffffffffff811681036105fa5790565b908160209103126105fa575180151581036105fa5790565b91908203918211610acf57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610b287fffffffff000000000000000000000000000000000000000000000000000000005f3516610a08565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c3f5784925f92610c4a575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610c3f575f92610c22575b505015610bfa57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b610c389250803d106104fb576104ed818361096e565b5f80610bf1565b6040513d5f823e3d90fd5b6064919250610c6590843d86116106b5576106a6818361096e565b9190610ba0565b73ffffffffffffffffffffffffffffffffffffffff16805f52600160205260405f205415610c975750565b7f79ff313f000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610c3f575f92610d3a57505090565b9091506020813d602011610d6b575b81610d566020938361096e565b810103126105fa575190811681036105fa5790565b3d9150610d49565b5f548110156109db575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b5f818152600160205260409020548015610ec9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90818101818111610acf575f5490838201918211610acf57818103610e60575b5050505f548015610e3357810190610e1282610d73565b909182549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610eb3610e6f610e7e93610d73565b90549060031b1c928392610d73565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080610dfb565b50505f90565b805f52600160205260405f2054155f14610f1f575f546801000000000000000081101561094157610f09610e7e8260018594015f55610d73565b90555f54905f52600160205260405f2055600190565b505f9056fea2646970667358221220a2986b0b1bc4d47718ece5acb272c173c7af309adda80ee75d38a59841e5abbc64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xA8 JUMPI PUSH1 0x1F PUSH2 0x101B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xAC JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xA8 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0xA8 JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x99 JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0xF5A SWAP1 DUP2 PUSH2 0xC1 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xA33 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x3BF ADD MSTORE DUP2 DUP2 PUSH2 0x651 ADD MSTORE DUP2 DUP2 PUSH2 0x70F ADD MSTORE DUP2 DUP2 PUSH2 0xB6E ADD MSTORE PUSH2 0xD05 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1246DBF5 EQ PUSH2 0x8C7 JUMPI POP DUP1 PUSH4 0x4B164140 EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xB36A4AB1 EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xBBE95837 EQ PUSH2 0x176 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x8E JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x172 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x172 JUMPI PUSH2 0xA8 PUSH2 0x90A JUMP JUMPDEST PUSH2 0xB1 DUP2 PUSH2 0xC6C JUMP JUMPDEST PUSH2 0xB9 PUSH2 0xAFC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD6 PUSH2 0xCC2 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x16E JUMPI PUSH2 0x13F SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x165 JUMPI POP PUSH2 0x152 JUMPI POP RETURN JUMPDEST PUSH2 0x15B SWAP1 PUSH2 0x92D JUMP JUMPDEST PUSH2 0x162 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP DUP3 SWAP1 CALLVALUE PUSH2 0x342 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x342 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 SLOAD DUP2 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x338 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x32D JUMPI JUMPDEST POP PUSH2 0x307 JUMPI DUP6 SWAP2 DUP5 DUP3 PUSH2 0x1BA DUP3 DUP10 SWAP6 PUSH2 0xAC2 JUMP JUMPDEST SWAP2 PUSH2 0x1DC PUSH2 0x1C7 DUP5 PUSH2 0x9AF JUMP JUMPDEST SWAP4 PUSH2 0x1D4 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x96E JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x9AF JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x20 DUP7 ADD SWAP8 ADD CALLDATASIZE DUP9 CALLDATACOPY PUSH0 SLOAD DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x26E JUMPI POP POP POP POP POP POP DUP4 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x20 DUP8 MSTORE MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 SWAP3 JUMPDEST DUP3 DUP2 LT PUSH2 0x241 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x232 JUMP JUMPDEST DUP2 DUP2 SWAP12 SWAP9 SWAP8 SWAP10 SWAP11 SWAP12 LT ISZERO PUSH2 0x2DC JUMPI PUSH1 0x1 SWAP1 PUSH0 DUP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SLOAD AND PUSH2 0x2CF PUSH2 0x2C9 DUP9 DUP5 PUSH2 0xAC2 JUMP JUMPDEST DUP13 PUSH2 0x9C7 JUMP JUMPDEST MSTORE ADD SWAP10 SWAP9 SWAP8 SWAP6 SWAP7 SWAP10 PUSH2 0x20E JUMP JUMPDEST DUP4 PUSH1 0x32 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP8 PUSH2 0x1A6 JUMP JUMPDEST DUP1 DUP4 GT SWAP2 POP PUSH2 0x19F JUMP JUMPDEST POP DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x51C JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x518 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x514 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x514 JUMPI DUP4 DUP2 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x514 JUMPI PUSH1 0x24 SWAP1 PUSH1 0x5 SWAP4 CALLDATASIZE PUSH1 0x24 DUP3 PUSH1 0x5 SHL DUP9 ADD ADD GT PUSH2 0x510 JUMPI SWAP5 PUSH2 0x3A4 PUSH2 0xAFC JUMP JUMPDEST DUP8 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP3 JUMPDEST DUP9 DUP2 LT PUSH2 0x3EC JUMPI DUP11 DUP1 RETURN JUMPDEST DUP6 DUP2 DUP4 SHL DUP5 ADD ADD CALLDATALOAD DUP9 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x50C JUMPI DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE DUP12 DUP2 DUP10 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x502 JUMPI DUP14 SWAP2 PUSH2 0x4D5 JUMPI JUMPDEST POP ISZERO PUSH2 0x4AC JUMPI PUSH2 0x44C DUP2 PUSH2 0xECF JUMP JUMPDEST ISZERO PUSH2 0x483 JUMPI SWAP1 PUSH32 0x99B605510FFA7C63C0ABAE2DDB315D152C3780CB7FB860FE267AEEB55AA79C7 DUP12 PUSH1 0x1 SWAP4 DUP11 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x3E1 JUMP JUMPDEST PUSH32 0x391DE81200000000000000000000000000000000000000000000000000000000 DUP13 MSTORE DUP6 MSTORE DUP6 DUP12 REVERT JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE DUP6 MSTORE DUP6 DUP12 REVERT JUMPDEST PUSH2 0x4F5 SWAP2 POP DUP13 DUP14 RETURNDATASIZE LT PUSH2 0x4FB JUMPI JUMPDEST PUSH2 0x4ED DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAAA JUMP JUMPDEST PUSH0 PUSH2 0x43D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4E3 JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x5FA JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH2 0x53A PUSH2 0x90A JUMP JUMPDEST PUSH2 0x543 DUP2 PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x54B PUSH2 0xAFC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x568 PUSH2 0xCC2 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x5FA JUMPI PUSH2 0x5D1 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5F1 JUMPI POP PUSH2 0x5E5 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x5EF SWAP2 POP PUSH2 0x92D JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x5FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x6BC JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x68D JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x6AE SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x6B5 JUMPI JUMPDEST PUSH2 0x6A6 DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA7E JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x685 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x69C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x5FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x5FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x5FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x5FA JUMPI PUSH2 0x77B PUSH1 0x20 SWAP3 PUSH2 0xA08 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x5FA JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x5FA JUMPI DUP3 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x24 SWAP1 PUSH2 0x7C6 DUP6 PUSH2 0x9AF JUMP JUMPDEST SWAP5 PUSH2 0x7D3 DUP5 MLOAD SWAP7 DUP8 PUSH2 0x96E JUMP JUMPDEST DUP1 DUP7 MSTORE PUSH1 0x24 PUSH1 0x20 DUP8 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x5FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x89B JUMPI POP POP POP PUSH2 0x802 PUSH2 0xAFC JUMP JUMPDEST DUP4 MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x810 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x82F DUP3 DUP5 PUSH2 0x9C7 JUMP JUMPDEST MLOAD AND PUSH2 0x83A DUP2 PUSH2 0xDA6 JUMP JUMPDEST ISZERO PUSH2 0x871 JUMPI SWAP1 PUSH32 0x2D6E1422E38CF8B1C4F2314722A67F167A89F205D5109A044F5F8A89EECB45DC DUP9 PUSH1 0x1 SWAP4 DUP8 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x807 JUMP JUMPDEST DUP4 SWAP1 DUP7 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5FA JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0x7F0 JUMP JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x5FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8FA PUSH2 0x90A JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH0 KECCAK256 SLOAD ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x5FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x941 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x941 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x941 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x9DB JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x941 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x5FA JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0xACF JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB28 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xA08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC3F JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xC4A JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC3F JUMPI PUSH0 SWAP3 PUSH2 0xC22 JUMPI JUMPDEST POP POP ISZERO PUSH2 0xBFA JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xC38 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4FB JUMPI PUSH2 0x4ED DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xC65 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x6B5 JUMPI PUSH2 0x6A6 DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xBA0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH2 0xC97 JUMPI POP JUMP JUMPDEST PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC3F JUMPI PUSH0 SWAP3 PUSH2 0xD3A JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xD6B JUMPI JUMPDEST DUP2 PUSH2 0xD56 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x96E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x5FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xD49 JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0x9DB JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xEC9 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 ADD DUP2 DUP2 GT PUSH2 0xACF JUMPI PUSH0 SLOAD SWAP1 DUP4 DUP3 ADD SWAP2 DUP3 GT PUSH2 0xACF JUMPI DUP2 DUP2 SUB PUSH2 0xE60 JUMPI JUMPDEST POP POP POP PUSH0 SLOAD DUP1 ISZERO PUSH2 0xE33 JUMPI DUP2 ADD SWAP1 PUSH2 0xE12 DUP3 PUSH2 0xD73 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH0 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xEB3 PUSH2 0xE6F PUSH2 0xE7E SWAP4 PUSH2 0xD73 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 PUSH2 0xD73 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xDFB JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH0 EQ PUSH2 0xF1F JUMPI PUSH0 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x941 JUMPI PUSH2 0xF09 PUSH2 0xE7E DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH0 SSTORE PUSH2 0xD73 JUMP JUMPDEST SWAP1 SSTORE PUSH0 SLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG2 SWAP9 PUSH12 0xB1BC4D47718ECE5ACB272C1 PUSH20 0xC7AF309ADDA80EE75D38A59841E5ABBC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"446:1607:69:-:0;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;-1:-1:-1;;;;;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:1607:69;;;;;;;922:4:45;1347:46:33;;943:28:43;939:79;;1028:14;;446:1607:69;;;;;;;;1347:46:33;446:1607:69;;;;;1028:14:43;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;;;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;446:1607:69;-1:-1:-1;446:1607:69;;;;;;-1:-1:-1;446:1607:69;;;;;-1:-1:-1;446:1607:69"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2314,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2730,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2686,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":2479,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2754,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2414,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6930":{"entryPoint":2349,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":3791,"id":12079,"parameterSlots":1,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":2812,"id":4130,"parameterSlots":0,"returnSlots":0},"fun_ensurePoolAdded":{"entryPoint":3180,"id":14612,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":2568,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":3266,"id":15530,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":3494,"id":12163,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_address_dyn":{"entryPoint":2503,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":3443,"id":null,"parameterSlots":1,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":2611}],"6692":[{"length":32,"start":959},{"length":32,"start":1617},{"length":32,"start":1807},{"length":32,"start":2926},{"length":32,"start":3333}]},"linkReferences":{},"object":"60806040818152600480361015610014575f80fd5b5f925f3560e01c9081631246dbf5146108c7575080634b16414014610782578063851c1bb3146107335780638d928af8146106e35780638eec5d70146106c6578063aaabadc5146105fe578063abaa335614610520578063b36a4ab114610346578063bbe95837146101765763fd267f391461008e575f80fd5b8291346101725780600319360112610172576100a861090a565b6100b181610c6c565b6100b9610afc565b73ffffffffffffffffffffffffffffffffffffffff6100d6610cc2565b1692833b1561016e5761013f9385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561016557506101525750f35b61015b9061092d565b6101625780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b508290346103425782600319360112610342578035906024926024358154818511908115610338575b811561032d575b5061030757859184826101ba828995610ac2565b916101dc6101c7846109af565b936101d48851958661096e565b8085526109af565b946020977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020860197013688375f54835b85811061026e57505050505050835194859460208601926020875251809352850193925b82811061024157505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610232565b81819b9897999a9b10156102dc576001905f805273ffffffffffffffffffffffffffffffffffffffff817f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630154166102cf6102c98884610ac2565b8c6109c7565b520199989795969961020e565b836032847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b507f4e23d035000000000000000000000000000000000000000000000000000000008152fd5b9050841015876101a6565b808311915061019f565b5080fd5b50903461051c5760209160206003193601126105185780359167ffffffffffffffff9182841161051457366023850112156105145783810135928311610514576024906005933660248260051b8801011161051057946103a4610afc565b879073ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016925b8881106103ec578a80f35b8581831b8401013588811680910361050c5787517fc673bdaf00000000000000000000000000000000000000000000000000000000815281878201528b818981895afa908115610502578d916104d5575b50156104ac5761044c81610ecf565b1561048357907f099b605510ffa7c63c0abae2ddb315d152c3780cb7fb860fe267aeeb55aa79c78b6001938a51908152a1016103e1565b7f391de812000000000000000000000000000000000000000000000000000000008c528552858bfd5b7f9e51bd5c000000000000000000000000000000000000000000000000000000008c528552858bfd5b6104f591508c8d3d106104fb575b6104ed818361096e565b810190610aaa565b5f61043d565b503d6104e3565b89513d8f823e3d90fd5b8b80fd5b8780fd5b8580fd5b8380fd5b8280fd5b5090346105fa57806003193601126105fa5761053a61090a565b61054381610c6c565b61054b610afc565b73ffffffffffffffffffffffffffffffffffffffff610568610cc2565b1692833b156105fa576105d1935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156105f157506105e5575080f35b6105ef915061092d565b005b513d5f823e3d90fd5b5f80fd5b50346105fa575f6003193601126105fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156106bc57926020935f9361068d575b505191168152f35b6106ae919350843d86116106b5575b6106a6818361096e565b810190610a7e565b9184610685565b503d61069c565b83513d5f823e3d90fd5b82346105fa575f6003193601126105fa576020905f549051908152f35b82346105fa575f6003193601126105fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346105fa5760206003193601126105fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036105fa5761077b602092610a08565b9051908152f35b5090346105fa5760209160206003193601126105fa5780359167ffffffffffffffff83116105fa57366023840112156105fa5782820135926024906107c6856109af565b946107d38451968761096e565b8086526024602087019160051b830101913683116105fa57602401905b82821061089b57505050610802610afc565b8351935f5b85811061081057005b73ffffffffffffffffffffffffffffffffffffffff61082f82846109c7565b511661083a81610da6565b1561087157907f2d6e1422e38cf8b1c4f2314722a67f167a89f205d5109a044f5f8a89eecb45dc886001938751908152a101610807565b8390867f79ff313f000000000000000000000000000000000000000000000000000000005f52525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036105fa5781529087019087016107f0565b8390346105fa5760206003193601126105fa5760209173ffffffffffffffffffffffffffffffffffffffff6108fa61090a565b165f52600183525f205415158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036105fa57565b67ffffffffffffffff811161094157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761094157604052565b67ffffffffffffffff81116109415760051b60200190565b80518210156109db5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176109415760405251902090565b908160209103126105fa575173ffffffffffffffffffffffffffffffffffffffff811681036105fa5790565b908160209103126105fa575180151581036105fa5790565b91908203918211610acf57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610b287fffffffff000000000000000000000000000000000000000000000000000000005f3516610a08565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c3f5784925f92610c4a575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610c3f575f92610c22575b505015610bfa57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b610c389250803d106104fb576104ed818361096e565b5f80610bf1565b6040513d5f823e3d90fd5b6064919250610c6590843d86116106b5576106a6818361096e565b9190610ba0565b73ffffffffffffffffffffffffffffffffffffffff16805f52600160205260405f205415610c975750565b7f79ff313f000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610c3f575f92610d3a57505090565b9091506020813d602011610d6b575b81610d566020938361096e565b810103126105fa575190811681036105fa5790565b3d9150610d49565b5f548110156109db575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b5f818152600160205260409020548015610ec9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90818101818111610acf575f5490838201918211610acf57818103610e60575b5050505f548015610e3357810190610e1282610d73565b909182549160031b1b191690555f555f5260016020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b610eb3610e6f610e7e93610d73565b90549060031b1c928392610d73565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90555f52600160205260405f20555f8080610dfb565b50505f90565b805f52600160205260405f2054155f14610f1f575f546801000000000000000081101561094157610f09610e7e8260018594015f55610d73565b90555f54905f52600160205260405f2055600190565b505f9056fea2646970667358221220a2986b0b1bc4d47718ece5acb272c173c7af309adda80ee75d38a59841e5abbc64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1246DBF5 EQ PUSH2 0x8C7 JUMPI POP DUP1 PUSH4 0x4B164140 EQ PUSH2 0x782 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x733 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xB36A4AB1 EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xBBE95837 EQ PUSH2 0x176 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x8E JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x172 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x172 JUMPI PUSH2 0xA8 PUSH2 0x90A JUMP JUMPDEST PUSH2 0xB1 DUP2 PUSH2 0xC6C JUMP JUMPDEST PUSH2 0xB9 PUSH2 0xAFC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD6 PUSH2 0xCC2 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x16E JUMPI PUSH2 0x13F SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x165 JUMPI POP PUSH2 0x152 JUMPI POP RETURN JUMPDEST PUSH2 0x15B SWAP1 PUSH2 0x92D JUMP JUMPDEST PUSH2 0x162 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP DUP3 SWAP1 CALLVALUE PUSH2 0x342 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x342 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 SLOAD DUP2 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x338 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x32D JUMPI JUMPDEST POP PUSH2 0x307 JUMPI DUP6 SWAP2 DUP5 DUP3 PUSH2 0x1BA DUP3 DUP10 SWAP6 PUSH2 0xAC2 JUMP JUMPDEST SWAP2 PUSH2 0x1DC PUSH2 0x1C7 DUP5 PUSH2 0x9AF JUMP JUMPDEST SWAP4 PUSH2 0x1D4 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x96E JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x9AF JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x20 DUP7 ADD SWAP8 ADD CALLDATASIZE DUP9 CALLDATACOPY PUSH0 SLOAD DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x26E JUMPI POP POP POP POP POP POP DUP4 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x20 DUP8 MSTORE MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 SWAP3 JUMPDEST DUP3 DUP2 LT PUSH2 0x241 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x232 JUMP JUMPDEST DUP2 DUP2 SWAP12 SWAP9 SWAP8 SWAP10 SWAP11 SWAP12 LT ISZERO PUSH2 0x2DC JUMPI PUSH1 0x1 SWAP1 PUSH0 DUP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SLOAD AND PUSH2 0x2CF PUSH2 0x2C9 DUP9 DUP5 PUSH2 0xAC2 JUMP JUMPDEST DUP13 PUSH2 0x9C7 JUMP JUMPDEST MSTORE ADD SWAP10 SWAP9 SWAP8 SWAP6 SWAP7 SWAP10 PUSH2 0x20E JUMP JUMPDEST DUP4 PUSH1 0x32 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP8 PUSH2 0x1A6 JUMP JUMPDEST DUP1 DUP4 GT SWAP2 POP PUSH2 0x19F JUMP JUMPDEST POP DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x51C JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x518 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x514 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x514 JUMPI DUP4 DUP2 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x514 JUMPI PUSH1 0x24 SWAP1 PUSH1 0x5 SWAP4 CALLDATASIZE PUSH1 0x24 DUP3 PUSH1 0x5 SHL DUP9 ADD ADD GT PUSH2 0x510 JUMPI SWAP5 PUSH2 0x3A4 PUSH2 0xAFC JUMP JUMPDEST DUP8 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP3 JUMPDEST DUP9 DUP2 LT PUSH2 0x3EC JUMPI DUP11 DUP1 RETURN JUMPDEST DUP6 DUP2 DUP4 SHL DUP5 ADD ADD CALLDATALOAD DUP9 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x50C JUMPI DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE DUP12 DUP2 DUP10 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x502 JUMPI DUP14 SWAP2 PUSH2 0x4D5 JUMPI JUMPDEST POP ISZERO PUSH2 0x4AC JUMPI PUSH2 0x44C DUP2 PUSH2 0xECF JUMP JUMPDEST ISZERO PUSH2 0x483 JUMPI SWAP1 PUSH32 0x99B605510FFA7C63C0ABAE2DDB315D152C3780CB7FB860FE267AEEB55AA79C7 DUP12 PUSH1 0x1 SWAP4 DUP11 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x3E1 JUMP JUMPDEST PUSH32 0x391DE81200000000000000000000000000000000000000000000000000000000 DUP13 MSTORE DUP6 MSTORE DUP6 DUP12 REVERT JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE DUP6 MSTORE DUP6 DUP12 REVERT JUMPDEST PUSH2 0x4F5 SWAP2 POP DUP13 DUP14 RETURNDATASIZE LT PUSH2 0x4FB JUMPI JUMPDEST PUSH2 0x4ED DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAAA JUMP JUMPDEST PUSH0 PUSH2 0x43D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4E3 JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x5FA JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH2 0x53A PUSH2 0x90A JUMP JUMPDEST PUSH2 0x543 DUP2 PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x54B PUSH2 0xAFC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x568 PUSH2 0xCC2 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x5FA JUMPI PUSH2 0x5D1 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5F1 JUMPI POP PUSH2 0x5E5 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x5EF SWAP2 POP PUSH2 0x92D JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x5FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x6BC JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x68D JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x6AE SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x6B5 JUMPI JUMPDEST PUSH2 0x6A6 DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA7E JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x685 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x69C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x5FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x5FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x5FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x5FA JUMPI PUSH2 0x77B PUSH1 0x20 SWAP3 PUSH2 0xA08 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x5FA JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x5FA JUMPI DUP3 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x24 SWAP1 PUSH2 0x7C6 DUP6 PUSH2 0x9AF JUMP JUMPDEST SWAP5 PUSH2 0x7D3 DUP5 MLOAD SWAP7 DUP8 PUSH2 0x96E JUMP JUMPDEST DUP1 DUP7 MSTORE PUSH1 0x24 PUSH1 0x20 DUP8 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x5FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x89B JUMPI POP POP POP PUSH2 0x802 PUSH2 0xAFC JUMP JUMPDEST DUP4 MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x810 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x82F DUP3 DUP5 PUSH2 0x9C7 JUMP JUMPDEST MLOAD AND PUSH2 0x83A DUP2 PUSH2 0xDA6 JUMP JUMPDEST ISZERO PUSH2 0x871 JUMPI SWAP1 PUSH32 0x2D6E1422E38CF8B1C4F2314722A67F167A89F205D5109A044F5F8A89EECB45DC DUP9 PUSH1 0x1 SWAP4 DUP8 MLOAD SWAP1 DUP2 MSTORE LOG1 ADD PUSH2 0x807 JUMP JUMPDEST DUP4 SWAP1 DUP7 PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5FA JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0x7F0 JUMP JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x5FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5FA JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8FA PUSH2 0x90A JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH0 KECCAK256 SLOAD ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x5FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x941 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x941 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x941 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x9DB JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x941 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x5FA JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0xACF JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB28 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xA08 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC3F JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xC4A JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC3F JUMPI PUSH0 SWAP3 PUSH2 0xC22 JUMPI JUMPDEST POP POP ISZERO PUSH2 0xBFA JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xC38 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4FB JUMPI PUSH2 0x4ED DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xBF1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xC65 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x6B5 JUMPI PUSH2 0x6A6 DUP2 DUP4 PUSH2 0x96E JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xBA0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH2 0xC97 JUMPI POP JUMP JUMPDEST PUSH32 0x79FF313F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC3F JUMPI PUSH0 SWAP3 PUSH2 0xD3A JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xD6B JUMPI JUMPDEST DUP2 PUSH2 0xD56 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x96E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x5FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xD49 JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0x9DB JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xEC9 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 ADD DUP2 DUP2 GT PUSH2 0xACF JUMPI PUSH0 SLOAD SWAP1 DUP4 DUP3 ADD SWAP2 DUP3 GT PUSH2 0xACF JUMPI DUP2 DUP2 SUB PUSH2 0xE60 JUMPI JUMPDEST POP POP POP PUSH0 SLOAD DUP1 ISZERO PUSH2 0xE33 JUMPI DUP2 ADD SWAP1 PUSH2 0xE12 DUP3 PUSH2 0xD73 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE PUSH0 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xEB3 PUSH2 0xE6F PUSH2 0xE7E SWAP4 PUSH2 0xD73 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 PUSH2 0xD73 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xDFB JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO PUSH0 EQ PUSH2 0xF1F JUMPI PUSH0 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x941 JUMPI PUSH2 0xF09 PUSH2 0xE7E DUP3 PUSH1 0x1 DUP6 SWAP5 ADD PUSH0 SSTORE PUSH2 0xD73 JUMP JUMPDEST SWAP1 SSTORE PUSH0 SLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG2 SWAP9 PUSH12 0xB1BC4D47718ECE5ACB272C1 PUSH20 0xC7AF309ADDA80EE75D38A59841E5ABBC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"446:1607:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;446:1607:69;1424:26:45;;;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;:::i;:::-;583:4;;;:::i;:::-;1525:73:33;;:::i;:::-;446:1607:69;1147:27;;:::i;:::-;446:1607;1147:92;;;;;;;446:1607;;;;;;1147:92;;;;;;446:1607;1147:92;;446:1607;;1147:92;;;446:1607;;;;;;;;;;;;;;;;;1147:92;;;;;;;;;;;;;446:1607;;1147:92;;;;:::i;:::-;446:1607;;1147:92;446:1607;;;;1147:92;446:1607;;;;;;;;1147:92;446:1607;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;;;;;;2965:9:65;;;:28;;;;;446:1607:69;2965:50:65;;;;446:1607:69;2961:106:65;;;3099:9;;;;;;;;;:::i;:::-;446:1607:69;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;3124:16:65;3142:6;;;;;;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;446:1607:69;;;;;;;;;;;;3150:3:65;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;3169:30:65;3175:8;;;;:::i;:::-;3169:30;;:::i;:::-;446:1607:69;;3124:16:65;;;;;;;;446:1607:69;;;;;;;;;;2961:106:65;3038:18;;;;;2965:50;2997:18;;;;;2965:50;;;:28;2978:15;;;;-1:-1:-1;2965:28:65;;446:1607:69;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;:::i;:::-;1310:13:65;446:1607:69;;1124:6:43;;;446:1607:69;1305:536:65;1325:10;;;;;;446:1607:69;;;1337:3:65;446:1607:69;;;;;;;;;;;;;;;;;;;1452:33:65;;;;;;446:1607:69;1452:33:65;;;;;;;;;;;;;;;;1337:3;446:1607:69;;1448:124:65;;8409:50:60;;;:::i;:::-;446:1607:69;1698:93:65;;446:1607:69;1810:20:65;446:1607:69;;;;;;;;1810:20:65;446:1607:69;1310:13:65;;1698:93;1754:22;;;446:1607:69;;1754:22:65;;;1448:124;1521:36;;;446:1607:69;;1521:36:65;;;1452:33;;;;;;;-1:-1:-1;1452:33:65;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;:::i;:::-;583:4;;;:::i;:::-;1525:73:33;;:::i;:::-;446:1607:69;1457:27;;:::i;:::-;446:1607;1457:94;;;;;;;446:1607;;;;;;1457:94;;;;;;446:1607;1457:94;;446:1607;;1457:94;;;446:1607;;;;;;;;;;;;;;;;;1457:94;;;;;;;;;;;;;446:1607;;;1457:94;;;;;:::i;:::-;446:1607;1457:94;446:1607;;;;;;;;1457:94;446:1607;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;1424:26:45;446:1607:69;;1424:26:45;;446:1607:69;1424:26:45;;1124:6:43;;;446:1607:69;1424:26:45;;;;;;;;;;446:1607:69;1424:26:45;;;446:1607:69;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;446:1607:69;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;1124:6:43;446:1607:69;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;;;:::i;:::-;446:1607:69;;2010:13:65;446:1607:69;2025:10:65;;;;;;446:1607:69;2037:3:65;446:1607:69;2071:8:65;;;;:::i;:::-;446:1607:69;;8730:53:60;;;:::i;:::-;446:1607:69;2093:92:65;;446:1607:69;2204:24:65;446:1607:69;;;;;;;;2204:24:65;446:1607:69;2010:13:65;;2093:92;2152:18;;;;446:1607:69;2152:18:65;446:1607:69;;2152:18:65;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1607:69;;;;;;;;;;:::i;:::-;;;;4360:14:60;446:1607:69;;;;;4360:26:60;;446:1607:69;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;446:1607:69;;;2303:50:33;;;2320:22;;446:1607:69;;;;;;;2303:50:33;;;446:1607:69;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;446:1607:69:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;1688:201:33;1762:20;1774:7;;;;1762:20;:::i;:::-;446:1607:69;;;;1336:22:43;;;:6;;;:22;:6;;;446:1607:69;1336:22:43;;;;;;;;;1774:7:33;1336:22:43;;;1688:201:33;446:1607:69;;;;;1336:64:43;;;;;446:1607:69;1336:64:43;;:22;:64;;446:1607:69;1820:10:33;446:1607:69;;;;1394:4:43;446:1607:69;;;;;1336:64:43;;;;;;;1774:7:33;1336:64:43;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:43;1774:7:33;1854:18;1336:64:43;;;;;;-1:-1:-1;1336:64:43;;;;;;:::i;:::-;;;;;;446:1607:69;;;1774:7:33;446:1607:69;;;;;1336:22:43;446:1607:69;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;3468:156:65;446:1607:69;;;3536:6:65;446:1607:69;4360:14:60;446:1607:69;;;3536:6:65;446:1607:69;;4360:26:60;3532:86:65;;3468:156;:::o;3532:86::-;3589:18;3536:6;3589:18;;446:1607:69;;3536:6:65;3589:18;1906:145:69;446:1607;;;2007:37;;446:1607;2007:37;446:1607;2007:37;446:1607;1124:6:43;446:1607:69;;2007:37;;;;;;;;;;;2000:44;;1906:145;:::o;2007:37::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;446:1607;;;;;;;;;;;;1906:145;:::o;2007:37::-;;;-1:-1:-1;2007:37:69;;446:1607;;;;;;;;;;;;;;;;:::o;2815:1368:60:-;446:1607:69;;;;3010:14:60;446:1607:69;;;;;;3046:13:60;;;;446:1607:69;;;;;;;;;;;;;;;;;;;;;3521:23:60;;;3517:378;;3042:1135;446:1607:69;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3010:14:60;446:1607:69;;;;;;;3010:14:60;4112:11;:::o;446:1607:69:-;;;;;;;;;;3517:378:60;446:1607:69;3584:22:60;3705:23;3584:22;;:::i;:::-;446:1607:69;;;;;;3705:23:60;;;;:::i;:::-;446:1607:69;;;;;;;;;;;;;;;;;;;;;;;;3010:14:60;446:1607:69;;;;;;3517:378:60;;;;;3042:1135;4154:12;;446:1607:69;4154:12:60;:::o;2241:406::-;446:1607:69;;;4360:14:60;446:1607:69;;;;;;4360:26:60;2320:321;446:1607:69;;;;;;;;;;;;;;4360:14:60;446:1607:69;;;;;;:::i;:::-;;;;;;;;4360:14:60;446:1607:69;;;;;;4360:14:60;2576:11;:::o;2320:321::-;2618:12;446:1607:69;2618:12:60;:::o"},"methodIdentifiers":{"addPools(address[])":"b36a4ab1","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPoolCount()":"8eec5d70","getPools(uint256,uint256)":"bbe95837","getVault()":"8d928af8","hasPool(address)":"1246dbf5","removePools(address[])":"4b164140","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"hasPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"PoolAlreadyInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address)\":[{\"params\":{\"pool\":\"Address of the pool being removed\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was added\"}},\"PoolRemovedFromSet(address)\":{\"params\":{\"pool\":\"Address of the pool that was removed\"}}},\"kind\":\"dev\",\"methods\":{\"addPools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may add pools to the set.\",\"params\":{\"newPools\":\"List of pools to add\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getPoolCount()\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction.\",\"returns\":{\"_0\":\"poolCount The current number of pools in the set\"}},\"getPools(uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\",\"params\":{\"from\":\"Start index\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"hasPool(address)\":{\"params\":{\"pool\":\"Pool to check\"},\"returns\":{\"_0\":\"isPausable True if the pool is in the set, false otherwise\"}},\"removePools(address[])\":{\"details\":\"This is a permissioned function. Only authorized accounts (e.g., monitoring service providers) may remove pools from the set.\",\"params\":{\"pools\":\"List of pools to remove\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"PoolAlreadyInSet(address)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"PoolAddedToSet(address)\":{\"notice\":\"Emitted when a pool is added to the set of pools that can be controlled by the helper contract.\"},\"PoolRemovedFromSet(address)\":{\"notice\":\"Emitted when a pool is removed from the set of pools that can be controlled by the helper contract.\"}},\"kind\":\"user\",\"methods\":{\"addPools(address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getPoolCount()\":{\"notice\":\"Get the number of pools.\"},\"getPools(uint256,uint256)\":{\"notice\":\"Get a range of pools.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"hasPool(address)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"removePools(address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeHelper.sol\":\"ProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xc69ed5b725cd2b877ac74ee7288639d86297ca434418753833758611898d2018\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37b1b0fb636a1e35cf45a709cf87883b95abf66daf1b374456ceb2bc3f5fea08\",\"dweb:/ipfs/QmbcNhkXd5urdbC7SpD2CKVNuWYMHmca3oiTUPWhqoudZe\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x661784fa00ecc7842f0468d6c69d4f238b6fdf582a9d54042b682556b05a80d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ed5e9f2b41125d98ca74db929ff4880f6303bd560d95a4f7d51ea5ed80f7f789\",\"dweb:/ipfs/QmPzF4iWYDUURUTDWdoGYBkQs81RjDBZEKEubWTYFNijbX\"]},\"contracts/ProtocolFeeHelper.sol\":{\"keccak256\":\"0x1a8627a4e6939fa37284a3cfb7bb21505d8c616b1b6ee1e71e73c28164f09268\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://abf1c8c584b700c9cdbef9141c533aaedc228e636d36eaa9be7c0840b82479ff\",\"dweb:/ipfs/QmVmmztTXFBQCUPjYiC7FHJnfwVwFZkzNxnKBtCAyuCN8R\"]}},\"version\":1}"}},"contracts/ProtocolFeePercentagesProvider.sol":{"ProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"trustedContractRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":510,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"61014060409080825234610169578181610ee1803803809161002182856101fe565b8339810103126101695780516001600160a01b03908181169081810361016957602080940151908382168203610169573060805282156101ef5760a052845163217cb6f560e21b8152918490839060049082905afa9182156101e5575f926101ad575b5060e082905260c05283516313b968ab60e11b81529391168284600481845afa938415610174575f9461017e575b5082600491610100958652835192838092630bc65c9d60e31b82525afa928315610174575f93610140575b50506101209182525190610cab9283610236843960805183610ab4015260a05183818161015f015281816102000152610668015260c05183818160e7015261077e015260e0518381816102500152610373015251826106f40152518161071b0152f35b9080929350813d831161016d575b61015881836101fe565b810103126101695751905f806100dd565b5f80fd5b503d61014e565b82513d5f823e3d90fd5b9093508281813d83116101a6575b61019681836101fe565b81010312610169575192826100b2565b503d61018c565b9091508381813d83116101de575b6101c581836101fe565b810103126101695751828116810361016957905f610084565b503d6101bb565b85513d5f823e3d90fd5b630647140b60e51b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761022157604052565b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122025a631b92d2617f42299d69ab02845bb5616d908f402b84c42f4473ed398910964736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x169 JUMPI DUP2 DUP2 PUSH2 0xEE1 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x1FE JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x169 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x169 JUMPI PUSH1 0x20 DUP1 SWAP5 ADD MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x169 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP3 ISZERO PUSH2 0x1EF JUMPI PUSH1 0xA0 MSTORE DUP5 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 DUP5 SWAP1 DUP4 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1E5 JUMPI PUSH0 SWAP3 PUSH2 0x1AD JUMPI JUMPDEST POP PUSH1 0xE0 DUP3 SWAP1 MSTORE PUSH1 0xC0 MSTORE DUP4 MLOAD PUSH4 0x13B968AB PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 SWAP2 AND DUP3 DUP5 PUSH1 0x4 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP5 PUSH2 0x17E JUMPI JUMPDEST POP DUP3 PUSH1 0x4 SWAP2 PUSH2 0x100 SWAP6 DUP7 MSTORE DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xBC65C9D PUSH1 0xE3 SHL DUP3 MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP4 PUSH2 0x140 JUMPI JUMPDEST POP POP PUSH2 0x120 SWAP2 DUP3 MSTORE MLOAD SWAP1 PUSH2 0xCAB SWAP3 DUP4 PUSH2 0x236 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 PUSH2 0xAB4 ADD MSTORE PUSH1 0xA0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x15F ADD MSTORE DUP2 DUP2 PUSH2 0x200 ADD MSTORE PUSH2 0x668 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 DUP2 DUP2 PUSH1 0xE7 ADD MSTORE PUSH2 0x77E ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x250 ADD MSTORE PUSH2 0x373 ADD MSTORE MLOAD DUP3 PUSH2 0x6F4 ADD MSTORE MLOAD DUP2 PUSH2 0x71B ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x16D JUMPI JUMPDEST PUSH2 0x158 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP1 PUSH0 DUP1 PUSH2 0xDD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x14E JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP4 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1A6 JUMPI JUMPDEST PUSH2 0x196 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP3 DUP3 PUSH2 0xB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x18C JUMP JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DE JUMPI JUMPDEST PUSH2 0x1C5 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x169 JUMPI SWAP1 PUSH0 PUSH2 0x84 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1BB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x221 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xA6 BALANCE 0xB9 0x2D 0x26 OR DELEGATECALL 0x22 SWAP10 0xD6 SWAP11 0xB0 0x28 GASLIMIT 0xBB JUMP AND 0xD9 ADDMOD DELEGATECALL MUL 0xB8 0x4C TIMESTAMP DELEGATECALL SELFBALANCE RETURNDATACOPY 0xD3 SWAP9 SWAP2 MULMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:70:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1136:7209:70;;;;;;;;;;;;;;;;;;;;;;;922:4:45;1347:46:33;;943:28:43;;939:79;;1028:14;;1136:7209:70;;-1:-1:-1;;;2434:32:70;;1136:7209;1028:14:43;;1136:7209:70;;2434:32;;1136:7209;;2434:32;;;;;;;-1:-1:-1;2434:32:70;;;-1:-1:-1;;1136:7209:70;2477:46;;;2533:50;;1136:7209;;-1:-1:-1;;;2700:101:70;;1136:7209;;;2700:101;1136:7209;2434:32;1136:7209;;2700:101;;;;;;;-1:-1:-1;2700:101:70;;;-1:-1:-1;2668:133:70;;2434:32;2668:133;;;;;1136:7209;;;;;;;;;2844:102;;;;;;;;;-1:-1:-1;2844:102:70;;;-1:-1:-1;2811:135:70;;;;;;1136:7209;;;;;;;;1347:46:33;1136:7209:70;;;;;1028:14:43;1136:7209:70;;;;;;;;;;;;;;;2533:50;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2844:102;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;2844:102;;;;;1136:7209;-1:-1:-1;1136:7209:70;;2844:102;;;;;;1136:7209;;;-1:-1:-1;1136:7209:70;;;;;2700:101;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;2700:101;;;;;;;2434:32;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;;;;;;2434:32;;;;;;;;;;1136:7209;;;-1:-1:-1;1136:7209:70;;;;;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;1136:7209:70;;;;;-1:-1:-1;;1136:7209:70;;;;-1:-1:-1;;;;;1136:7209:70;;;;;;;;;;:::o;:::-;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2480,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2798,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2608,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6540":{"entryPoint":2515,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_6542":{"entryPoint":2588,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":2842,"id":15893,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":2697,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getValidatedProtocolFees":{"entryPoint":3028,"id":15846,"parameterSlots":1,"returnSlots":1},"fun_toUint64":{"entryPoint":2959,"id":10970,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":2740}],"6692":[{"length":32,"start":351},{"length":32,"start":512},{"length":32,"start":1640}],"15572":[{"length":32,"start":231},{"length":32,"start":1918}],"15575":[{"length":32,"start":592},{"length":32,"start":883}],"15577":[{"length":32,"start":1780}],"15579":[{"length":32,"start":1819}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122025a631b92d2617f42299d69ab02845bb5616d908f402b84c42f4473ed398910964736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xA6 BALANCE 0xB9 0x2D 0x26 OR DELEGATECALL 0x22 SWAP10 0xD6 SWAP11 0xB0 0x28 GASLIMIT 0xBB JUMP AND 0xD9 ADDMOD DELEGATECALL MUL 0xB8 0x4C TIMESTAMP DELEGATECALL SELFBALANCE RETURNDATACOPY 0xD3 SWAP9 SWAP2 MULMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;;1136:7209:70;1424:26:45;;;1136:7209:70;;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;3619:34;1136:7209;;:::i;:::-;3619:34;:::i;:::-;1136:7209;;;;;;3768:38;;1136:7209;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;;;;3304:24;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;1424:26:45;1136:7209:70;;1424:26:45;;1136:7209:70;1424:26:45;;1124:6:43;;;1136:7209:70;1424:26:45;;;;;;;;;;1136:7209:70;1424:26:45;;;1136:7209:70;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1136:7209:70;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;;;;1124:6:43;1136:7209:70;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;;;;3111:22;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5862:34;;;;;;:::i;:::-;5912:13;1136:7209;6451:38;;;;1136:7209;;;;;7227:22;;;1136:7209;5907:607;5945:3;1136:7209;;5927:16;;;;;1136:7209;;;;;;;;;;;;;;6168:56;;;;;;1136:7209;6168:56;;;;;;;;;;;;1136:7209;6168:56;;;5945:3;1136:7209;;6164:151;;1136:7209;;;;;;;;;7227:84;;;;;;1136:7209;;;7227:84;;1136:7209;;;7227:84;;;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;7227:84;;;1136:7209;7227:84;1136:7209;-1:-1:-1;1136:7209:70;7227:84;;;;;;;;5945:3;7321:86;;;;;;1136:7209;;;7321:86;;1136:7209;;;;7321:86;;;1136:7209;;;;;;;;;;;;;;;;;;;7321:86;;;;;;;;;;;1136:7209;7321:86;;;5945:3;;1136:7209;5912:13;;7321:86;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;7227:84;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;;6164:151;6260:40;;;;;;1136:7209;6260:40;1136:7209;;;;6260:40;6168:56;;;;;;;-1:-1:-1;6168:56:70;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1136:7209;;;;;;;;;5927:16;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:70;;;;;;;:::i;:::-;;;;;1762:20:33;1774:7;1136:7209:70;;1774:7:33;;1762:20;:::i;:::-;1136:7209:70;;;;;1336:22:43;;1136:7209:70;1336:6:43;;;;;;;1136:7209:70;1336:22:43;;;;;;;;;;;;1136:7209:70;1336:22:43;;;1136:7209:70;;;;;;1336:64:43;;;;;1136:7209:70;1336:64:43;;;;;1136:7209:70;1820:10:33;1136:7209:70;;;;1394:4:43;1136:7209:70;;;;;1336:64:43;;;;;;;1136:7209:70;1336:64:43;;;1136:7209:70;1797:34:33;;1793:90;;4208:29:70;4180:57;;4176:152;;4371:30;4342:59;;4338:155;;1136:7209;;;;;;4547:85;;;;1136:7209;4547:85;;1136:7209;4547:85;;;1136:7209;;;;;;;;4547:24;1136:7209;4547:85;;;;;;;1136:7209;4547:85;;;1136:7209;;;4543:155;;5253:104;4776:25;;;;;:::i;:::-;4834:26;;;:::i;:::-;5074:36;;;:::i;:::-;5152:37;;;:::i;:::-;1136:7209;;;;;;:::i;:::-;;;;;;;5013:224;;;;1136:7209;;;;5013:224;;;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5253:104;1136:7209;4543:155;4664:23;;;1136:7209;4664:23;1136:7209;;;4664:23;4547:85;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;4338:155;4424:58;;1136:7209;4424:58;1136:7209;4424:58;4176:152;4260:57;;1136:7209;4260:57;1136:7209;4260:57;1793:90:33;1854:18;;1136:7209:70;1854:18:33;1136:7209:70;1854:18:33;1336:64:43;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209:70;;;;;;;;;1336:22:43;1136:7209:70;1336:22:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;1136:7209:70;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1136:7209:70;;;2303:50:33;;;2320:22;;1136:7209:70;;;;;;;2303:50:33;;;;;;:::i;:::-;1136:7209:70;2293:61:33;;1931:430;:::o;1136:7209:70:-;;;;;;;;;;;;;;;;;;:::o;7594:749::-;19669:4:32;;;;;;;;;;;;;;;;;;8195:74:70;8191:146;;7594:749::o;8191:146::-;8292:34;-1:-1:-1;8292:34:70;;-1:-1:-1;8292:34:70;19669:4:32;;-1:-1:-1;19669:4:32;;;;;-1:-1:-1;19669:4:32;13291:213:59;1136:7209:70;13369:24:59;;;;13365:103;;1136:7209:70;13291:213:59;:::o;13365:103::-;13416:41;;;13447:2;13416:41;1136:7209:70;;;;13416:41:59;;6526:313:70;;1136:7209;;;-1:-1:-1;1136:7209:70;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1136:7209:70;-1:-1:-1;1136:7209:70;;;-1:-1:-1;1136:7209:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:102;;;6526:313;:::o;6731:102::-;6796:26;-1:-1:-1;6796:26:70;;1136:7209;;-1:-1:-1;6796:26:70"},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","getVault()":"8d928af8","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"trustedContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContractRegistry()\":{\"returns\":{\"_0\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"The address of the fee controller\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeePercentagesProvider.sol\":\"ProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xfeb8192a52018fbe8fa3df7398ca90b42487e1ae128473ac60895740a10d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://05898cb2e0b82b2910aa891d1657be38189c180590f949145ab61b7cbd8552f7\",\"dweb:/ipfs/QmSnHhbmrCBhnjsSHbVPswBm7NHsUHq5zzQV2wqZqokoqA\"]}},\"version\":1}"}},"contracts/ProtocolFeeSweeper.sol":{"ProtocolFeeSweeper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100fe57601f611fe938819003918201601f19168301916001600160401b038311848410176101025780849260409485528339810103126100fe5780516001600160a01b0391828216908183036100fe57602001519283168093036100fe5730608052156100ef5760a05280156100e057600180546001600160a01b03191682179055604051907fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2611ed29081610117823960805181611937015260a051818181610f0601528181610fe8015281816119c50152611ae10152f35b630ed1b8b360e31b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060405260048036101561009e575b36156100785734610078576064906020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b7ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb001461179c5780634ccb20c01461176957806380db0d5114611737578063851c1bb3146116e857806385f2dbd4146116b057806388f6d2a41461100c5780638d928af814610fbc5780639c5cee9b14610f72578063aaabadc514610eb2578063b0edcc5314610caa578063b11f061e14610bd3578063b974699514610300578063e20c482f146101fb5763e74b981b0361000f57346101f75760206003193601126101f757610155611828565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017b82841630611a5f565b169182156101d157507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101f75760206003193601126101f757610215611828565b73ffffffffffffffffffffffffffffffffffffffff90610239826001541630611a5f565b1690815f52600260205260ff60405f2054166102d75781156102b15750805f52600260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b7f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101f75760a06003193601126101f75761031a611828565b6024359073ffffffffffffffffffffffffffffffffffffffff8216908183036101f75761034561184b565b9161034e611be0565b61037073ffffffffffffffffffffffffffffffffffffffff6001541630611a5f565b83925f9173ffffffffffffffffffffffffffffffffffffffff8216610b22575b6040517f70a0823100000000000000000000000000000000000000000000000000000000968782523089830152602082602481865afa918215610ae3575f92610aee575b5073ffffffffffffffffffffffffffffffffffffffff6103f2611982565b16803b156101f7576040517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88168b8201525f8160248183865af18015610ae357610ad0575b50803b15610acc578573ffffffffffffffffffffffffffffffffffffffff606489838e9560405196879586947fb53a70b200000000000000000000000000000000000000000000000000000000865216908401523060248401528960448401525af180156109c857908691610ab4575b50506040519788523089890152602088602481865afa978815610aa9578598610a75575b5081880391888311610a495782980361051c575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b73ffffffffffffffffffffffffffffffffffffffff841615610a335750835473ffffffffffffffffffffffffffffffffffffffff16918083036105a257505050508061057b575061056d9350611cb6565b5f80808080808080806104f7565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b84979395946108df575b50506040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff85166024820152604480820184905281526106086064826118cb565b86808251602084018273ffffffffffffffffffffffffffffffffffffffff8b165af1610632611da6565b816108b0575b5080610890575b1561081f575b5073ffffffffffffffffffffffffffffffffffffffff600154169173ffffffffffffffffffffffffffffffffffffffff85163b1561081b5773ffffffffffffffffffffffffffffffffffffffff604051947fde557a32000000000000000000000000000000000000000000000000000000008652168885015273ffffffffffffffffffffffffffffffffffffffff8616602485015260448401526064830152604435608483015260a482015260643560c4820152838160e4818373ffffffffffffffffffffffffffffffffffffffff87165af18015610810579084916107f8575b505073ffffffffffffffffffffffffffffffffffffffff60446020928260405195869485937fdd62ed3e000000000000000000000000000000000000000000000000000000008552308b860152166024840152165afa9081156107ed5782916107bb575b5061079657505061056d565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90506020813d6020116107e5575b816107d6602093836118cb565b810103126101f757515f61078a565b3d91506107c9565b6040513d84823e3d90fd5b6108019061186e565b61080c57825f610726565b8280fd5b6040513d86823e3d90fd5b8680fd5b61088a906108846040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881660248201528960448201526044815261087e816118af565b88611d14565b86611d14565b5f610645565b5073ffffffffffffffffffffffffffffffffffffffff86163b151561063f565b80518015925082156108c5575b50505f610638565b6108d89250602080918301019101611c9e565b5f806108bd565b91925094506040517f38d52e0f0000000000000000000000000000000000000000000000000000000081526020818981855afa908115610a28579087929183916109d3575b5090606473ffffffffffffffffffffffffffffffffffffffff602093169760405194859384927fba0876520000000000000000000000000000000000000000000000000000000084528d8401523060248401523060448401525af19081156109c8578691610996575b50905f806105ac565b90506020813d6020116109c0575b816109b1602093836118cb565b810103126101f757515f61098d565b3d91506109a4565b6040513d88823e3d90fd5b919250506020813d602011610a20575b816109f0602093836118cb565b8101031261081b575173ffffffffffffffffffffffffffffffffffffffff8116810361081b578691906064610924565b3d91506109e3565b6040513d89823e3d90fd5b95509550505050610a449350611cb6565b61056d565b60248660118c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9097506020813d602011610aa1575b81610a91602093836118cb565b810103126101f75751965f6104e3565b3d9150610a84565b6040513d87823e3d90fd5b610abd9061186e565b610ac857845f6104bf565b8480fd5b8580fd5b610adb91965061186e565b5f945f61044f565b6040513d5f823e3d90fd5b9091506020813d602011610b1a575b81610b0a602093836118cb565b810103126101f75751905f6103d4565b3d9150610afd565b73ffffffffffffffffffffffffffffffffffffffff82165f52600260205260ff60405f2054165f14610b915773ffffffffffffffffffffffffffffffffffffffff5f541661039057867f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b8673ffffffffffffffffffffffffffffffffffffffff837f38553f6c000000000000000000000000000000000000000000000000000000005f5216905260245ffd5b50346101f75760206003193601126101f757610bed611828565b73ffffffffffffffffffffffffffffffffffffffff90610c11826001541630611a5f565b1690815f52600260205260ff60405f20541615610c815750805f52600260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b7fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101f7576020806003193601126101f75781359167ffffffffffffffff918284116101f757366023850112156101f75783820135926024908411610e86576005948460051b60405195610d01858301886118cb565b8652602484870191830101913683116101f757602401905b828210610e5a57505050610d2b611be0565b73ffffffffffffffffffffffffffffffffffffffff9360019480600154163303610e335785965f965b610d7d575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251871015610e2e57818588831b850101511696604051977f70a0823100000000000000000000000000000000000000000000000000000000895230888a015286898781845afa8015610ae3578a995f91610df9575b5090818a9392610de7575b50500196610d54565b610df2913390611c35565b5f80610dde565b8093929a50888092503d8311610e27575b610e1481836118cb565b810103126101f757905189989089610dd3565b503d610e0a565b6104f7565b847f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101f7578152908401908401610d19565b6041837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101f7575f6003193601126101f75773ffffffffffffffffffffffffffffffffffffffff602060405180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa908115610ae3576020925f92610f43575b5060405191168152f35b610f64919250833d8511610f6b575b610f5c81836118cb565b810190611a33565b905f610f39565b503d610f52565b346101f75760206003193601126101f75773ffffffffffffffffffffffffffffffffffffffff610fa0611828565b165f526002602052602060ff60405f2054166040519015158152f35b346101f7575f6003193601126101f757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101f75760a06003193601126101f757611026611828565b60249081359073ffffffffffffffffffffffffffffffffffffffff8083168093036101f75761105361184b565b9361105c611be0565b61106a826001541630611a5f565b815f9516918215159485611641575b604051917f70a082310000000000000000000000000000000000000000000000000000000095868452308a85015260209788858781875afa948515610ae3575f95611612575b50826110c9611982565b1694853b156101f7578b956040517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015610ae3576115ff575b50803b156115fb578b8760648f8360405195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156115f057908c916115d8575b5050604051988952308c8a015289898881885afa9889156115cd578b9961159e575b5080890398808a1161157357036111c5575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561155b575087548116908282036111fe5789897fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b6040517f38d52e0f00000000000000000000000000000000000000000000000000000000815288818c81875afa90811561155057899183918c91611511575b50169760648c8c60405197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156115065789936114d7575b50604080517f095ea7b300000000000000000000000000000000000000000000000000000000818b0181815273ffffffffffffffffffffffffffffffffffffffff8a16838a019081526020810188905291938d9283929161131791869101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856118cb565b835190828d5af1611326611da6565b816114a7575b508061149d575b15611469575b50506001541691853b1561146557604051937fde557a320000000000000000000000000000000000000000000000000000000085528a850152868585015260448401526064830152604435608483015260a482015260643560c4820152858160e48183875af180156109c85785939291879161144a575b505060449060405194859384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308b8501528301525afa91821561143f578392611411575b50506107965750505b5f808080808080808080806104f7565b90809250813d8311611438575b61142881836118cb565b810103126101f757515f806113f8565b503d61141e565b6040513d85823e3d90fd5b611457919293945061186e565b610ac857908391855f6113b0565b8880fd5b61087e61149692604051908c82015289898201528c604482015260448152611490816118af565b8a611d14565b5f80611339565b50883b1515611333565b8051801592508c9083156114bf575b5050505f61132c565b6114cf9350820181019101611c9e565b5f8b816114b6565b9092508781813d83116114ff575b6114ef81836118cb565b810103126101f75751915f61128d565b503d6114e5565b6040513d8b823e3d90fd5b928092508391503d8311611549575b61152a81836118cb565b8101031261154557518181168103611545578189915f61123d565b8980fd5b503d611520565b6040513d8c823e3d90fd5b95975050945050505061156e9350611cb6565b611401565b878c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9098508981813d83116115c6575b6115b681836118cb565b810103126101f75751975f61118f565b503d6115ac565b6040513d8d823e3d90fd5b6115e19061186e565b6115ec578a5f61116d565b8a80fd5b6040513d8e823e3d90fd5b8b80fd5b61160a919c5061186e565b5f9a5f611115565b9094508881813d831161163a575b61162a81836118cb565b810103126101f75751935f6110bf565b503d611620565b835f52600260205260ff60405f2054165f1461168657815f541661107957877f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b8284897f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b346101f7575f6003193601126101f75760206116ca611982565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b50346101f75760206003193601126101f757357fffffffff00000000000000000000000000000000000000000000000000000000811681036101f75761172f60209161190c565b604051908152f35b346101f7575f6003193601126101f757602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101f7575f6003193601126101f757602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101f75760206003193601126101f7576117b5611828565b73ffffffffffffffffffffffffffffffffffffffff906117d9826001541630611a5f565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b67ffffffffffffffff811161188257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761188257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761188257604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176118825760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610ae3575f926119fa57505090565b9091506020813d602011611a2b575b81611a16602093836118cb565b810103126101f7575190811681036101f75790565b3d9150611a09565b908160209103126101f7575173ffffffffffffffffffffffffffffffffffffffff811681036101f75790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611a82575050565b611aae7fffffffff000000000000000000000000000000000000000000000000000000005f351661190c565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa908115610ae3578460649287955f91611bc3575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa918215610ae3575f92611b96575b505015611b6e57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b611bb59250803d10611bbc575b611bad81836118cb565b810190611c9e565b5f80611b65565b503d611ba3565b611bda9150863d8811610f6b57610f5c81836118cb565b5f611b17565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611c0d576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611c9c91611c976064836118cb565b611d14565b565b908160209103126101f7575180151581036101f75790565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611d03878284611c35565b8451968752602087015216941692a3565b5f8073ffffffffffffffffffffffffffffffffffffffff611d4a93169360208151910182865af1611d43611da6565b9083611e03565b8051908115159182611d8b575b5050611d605750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b611d9e9250602080918301019101611c9e565b155f80611d57565b3d15611dfe573d9067ffffffffffffffff82116118825760405191611df360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846118cb565b82523d5f602084013e565b606090565b90611e405750805115611e1857805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611e93575b611e51575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611e4956fea26469706673582212203d472912c296e57ff09e9ed02d2549f7e0085a6bcb427eb96e6a717e1205a70364736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xFE JUMPI PUSH1 0x1F PUSH2 0x1FE9 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x102 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xFE JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xFE JUMPI PUSH1 0x20 ADD MLOAD SWAP3 DUP4 AND DUP1 SWAP4 SUB PUSH2 0xFE JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xEF JUMPI PUSH1 0xA0 MSTORE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP3 OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 PUSH2 0x1ED2 SWAP1 DUP2 PUSH2 0x117 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1937 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xF06 ADD MSTORE DUP2 DUP2 PUSH2 0xFE8 ADD MSTORE DUP2 DUP2 PUSH2 0x19C5 ADD MSTORE PUSH2 0x1AE1 ADD MSTORE RETURN JUMPDEST PUSH4 0xED1B8B3 PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x9E JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x78 JUMPI CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x64 SWAP1 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x179C JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1769 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x1737 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x16E8 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x16B0 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0x100C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xFBC JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xF72 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xEB2 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xCAA JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xBD3 JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FB JUMPI PUSH4 0xE74B981B SUB PUSH2 0xF JUMPI CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x155 PUSH2 0x1828 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17B DUP3 DUP5 AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D1 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x215 PUSH2 0x1828 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x239 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP2 ISZERO PUSH2 0x2B1 JUMPI POP DUP1 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x31A PUSH2 0x1828 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x1F7 JUMPI PUSH2 0x345 PUSH2 0x184B JUMP JUMPDEST SWAP2 PUSH2 0x34E PUSH2 0x1BE0 JUMP JUMPDEST PUSH2 0x370 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST DUP4 SWAP3 PUSH0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB22 JUMPI JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP3 MSTORE ADDRESS DUP10 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP3 PUSH2 0xAEE JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F2 PUSH2 0x1982 JUMP JUMPDEST AND DUP1 EXTCODESIZE ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP12 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xAE3 JUMPI PUSH2 0xAD0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xACC JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x64 DUP10 DUP4 DUP15 SWAP6 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND SWAP1 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP10 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x9C8 JUMPI SWAP1 DUP7 SWAP2 PUSH2 0xAB4 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD SWAP8 DUP9 MSTORE ADDRESS DUP10 DUP10 ADD MSTORE PUSH1 0x20 DUP9 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0xAA9 JUMPI DUP6 SWAP9 PUSH2 0xA75 JUMPI JUMPDEST POP DUP2 DUP9 SUB SWAP2 DUP9 DUP4 GT PUSH2 0xA49 JUMPI DUP3 SWAP9 SUB PUSH2 0x51C JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO PUSH2 0xA33 JUMPI POP DUP4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 DUP1 DUP4 SUB PUSH2 0x5A2 JUMPI POP POP POP POP DUP1 PUSH2 0x57B JUMPI POP PUSH2 0x56D SWAP4 POP PUSH2 0x1CB6 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x4F7 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST DUP5 SWAP8 SWAP4 SWAP6 SWAP5 PUSH2 0x8DF JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MSTORE PUSH2 0x608 PUSH1 0x64 DUP3 PUSH2 0x18CB JUMP JUMPDEST DUP7 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND GAS CALL PUSH2 0x632 PUSH2 0x1DA6 JUMP JUMPDEST DUP2 PUSH2 0x8B0 JUMPI JUMPDEST POP DUP1 PUSH2 0x890 JUMPI JUMPDEST ISZERO PUSH2 0x81F JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE ISZERO PUSH2 0x81B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND DUP9 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0xE4 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND GAS CALL DUP1 ISZERO PUSH2 0x810 JUMPI SWAP1 DUP5 SWAP2 PUSH2 0x7F8 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 PUSH1 0x20 SWAP3 DUP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS DUP12 DUP7 ADD MSTORE AND PUSH1 0x24 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7ED JUMPI DUP3 SWAP2 PUSH2 0x7BB JUMPI JUMPDEST POP PUSH2 0x796 JUMPI POP POP PUSH2 0x56D JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7E5 JUMPI JUMPDEST DUP2 PUSH2 0x7D6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 PUSH2 0x78A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x7C9 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x801 SWAP1 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x80C JUMPI DUP3 PUSH0 PUSH2 0x726 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x88A SWAP1 PUSH2 0x884 PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP3 ADD MSTORE DUP10 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x87E DUP2 PUSH2 0x18AF JUMP JUMPDEST DUP9 PUSH2 0x1D14 JUMP JUMPDEST DUP7 PUSH2 0x1D14 JUMP JUMPDEST PUSH0 PUSH2 0x645 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND EXTCODESIZE ISZERO ISZERO PUSH2 0x63F JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x8C5 JUMPI JUMPDEST POP POP PUSH0 PUSH2 0x638 JUMP JUMPDEST PUSH2 0x8D8 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1C9E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x8BD JUMP JUMPDEST SWAP2 SWAP3 POP SWAP5 POP PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP10 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA28 JUMPI SWAP1 DUP8 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x9D3 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 SWAP4 AND SWAP8 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x9C8 JUMPI DUP7 SWAP2 PUSH2 0x996 JUMPI JUMPDEST POP SWAP1 PUSH0 DUP1 PUSH2 0x5AC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x9C0 JUMPI JUMPDEST DUP2 PUSH2 0x9B1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 PUSH2 0x98D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9A4 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP3 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA20 JUMPI JUMPDEST DUP2 PUSH2 0x9F0 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x81B JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x81B JUMPI DUP7 SWAP2 SWAP1 PUSH1 0x64 PUSH2 0x924 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9E3 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xA44 SWAP4 POP PUSH2 0x1CB6 JUMP JUMPDEST PUSH2 0x56D JUMP JUMPDEST PUSH1 0x24 DUP7 PUSH1 0x11 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP8 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAA1 JUMPI JUMPDEST DUP2 PUSH2 0xA91 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP7 PUSH0 PUSH2 0x4E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA84 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xABD SWAP1 PUSH2 0x186E JUMP JUMPDEST PUSH2 0xAC8 JUMPI DUP5 PUSH0 PUSH2 0x4BF JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST PUSH2 0xADB SWAP2 SWAP7 POP PUSH2 0x186E JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB1A JUMPI JUMPDEST DUP2 PUSH2 0xB0A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x3D4 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xAFD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0xB91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH2 0x390 JUMPI DUP7 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0xBED PUSH2 0x1828 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xC11 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xC81 JUMPI POP DUP1 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1F7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x24 SWAP1 DUP5 GT PUSH2 0xE86 JUMPI PUSH1 0x5 SWAP5 DUP5 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP6 PUSH2 0xD01 DUP6 DUP4 ADD DUP9 PUSH2 0x18CB JUMP JUMPDEST DUP7 MSTORE PUSH1 0x24 DUP5 DUP8 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE5A JUMPI POP POP POP PUSH2 0xD2B PUSH2 0x1BE0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xE33 JUMPI DUP6 SWAP7 PUSH0 SWAP7 JUMPDEST PUSH2 0xD7D JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP8 LT ISZERO PUSH2 0xE2E JUMPI DUP2 DUP6 DUP9 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP7 PUSH1 0x40 MLOAD SWAP8 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP10 MSTORE ADDRESS DUP9 DUP11 ADD MSTORE DUP7 DUP10 DUP8 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0xAE3 JUMPI DUP11 SWAP10 PUSH0 SWAP2 PUSH2 0xDF9 JUMPI JUMPDEST POP SWAP1 DUP2 DUP11 SWAP4 SWAP3 PUSH2 0xDE7 JUMPI JUMPDEST POP POP ADD SWAP7 PUSH2 0xD54 JUMP JUMPDEST PUSH2 0xDF2 SWAP2 CALLER SWAP1 PUSH2 0x1C35 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xDDE JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP11 POP DUP9 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xE27 JUMPI JUMPDEST PUSH2 0xE14 DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI SWAP1 MLOAD DUP10 SWAP9 SWAP1 DUP10 PUSH2 0xDD3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE0A JUMP JUMPDEST PUSH2 0x4F7 JUMP JUMPDEST DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x41 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xAE3 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF43 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF64 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF6B JUMPI JUMPDEST PUSH2 0xF5C DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1A33 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xF39 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF52 JUMP JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xFA0 PUSH2 0x1828 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x1026 PUSH2 0x1828 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x1F7 JUMPI PUSH2 0x1053 PUSH2 0x184B JUMP JUMPDEST SWAP4 PUSH2 0x105C PUSH2 0x1BE0 JUMP JUMPDEST PUSH2 0x106A DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST DUP2 PUSH0 SWAP6 AND SWAP2 DUP3 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x1641 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP6 DUP7 DUP5 MSTORE ADDRESS DUP11 DUP6 ADD MSTORE PUSH1 0x20 SWAP8 DUP9 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP6 PUSH2 0x1612 JUMPI JUMPDEST POP DUP3 PUSH2 0x10C9 PUSH2 0x1982 JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1F7 JUMPI DUP12 SWAP6 PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xAE3 JUMPI PUSH2 0x15FF JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x15FB JUMPI DUP12 DUP8 PUSH1 0x64 DUP16 DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x15F0 JUMPI SWAP1 DUP13 SWAP2 PUSH2 0x15D8 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD SWAP9 DUP10 MSTORE ADDRESS DUP13 DUP11 ADD MSTORE DUP10 DUP10 DUP9 DUP2 DUP9 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x15CD JUMPI DUP12 SWAP10 PUSH2 0x159E JUMPI JUMPDEST POP DUP1 DUP10 SUB SWAP9 DUP1 DUP11 GT PUSH2 0x1573 JUMPI SUB PUSH2 0x11C5 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x155B JUMPI POP DUP8 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x11FE JUMPI DUP10 DUP10 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP9 DUP2 DUP13 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1550 JUMPI DUP10 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x1511 JUMPI JUMPDEST POP AND SWAP8 PUSH1 0x64 DUP13 DUP13 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x1506 JUMPI DUP10 SWAP4 PUSH2 0x14D7 JUMPI JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP12 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP4 DUP11 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE SWAP2 SWAP4 DUP14 SWAP3 DUP4 SWAP3 SWAP2 PUSH2 0x1317 SWAP2 DUP7 SWAP2 ADD SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x18CB JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH2 0x1326 PUSH2 0x1DA6 JUMP JUMPDEST DUP2 PUSH2 0x14A7 JUMPI JUMPDEST POP DUP1 PUSH2 0x149D JUMPI JUMPDEST ISZERO PUSH2 0x1469 JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x1465 JUMPI PUSH1 0x40 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP11 DUP6 ADD MSTORE DUP7 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP6 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x9C8 JUMPI DUP6 SWAP4 SWAP3 SWAP2 DUP8 SWAP2 PUSH2 0x144A JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x143F JUMPI DUP4 SWAP3 PUSH2 0x1411 JUMPI JUMPDEST POP POP PUSH2 0x796 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x4F7 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1438 JUMPI JUMPDEST PUSH2 0x1428 DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 DUP1 PUSH2 0x13F8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141E JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x1457 SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x186E JUMP JUMPDEST PUSH2 0xAC8 JUMPI SWAP1 DUP4 SWAP2 DUP6 PUSH0 PUSH2 0x13B0 JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST PUSH2 0x87E PUSH2 0x1496 SWAP3 PUSH1 0x40 MLOAD SWAP1 DUP13 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP13 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1490 DUP2 PUSH2 0x18AF JUMP JUMPDEST DUP11 PUSH2 0x1D14 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1339 JUMP JUMPDEST POP DUP9 EXTCODESIZE ISZERO ISZERO PUSH2 0x1333 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP13 SWAP1 DUP4 ISZERO PUSH2 0x14BF JUMPI JUMPDEST POP POP POP PUSH0 PUSH2 0x132C JUMP JUMPDEST PUSH2 0x14CF SWAP4 POP DUP3 ADD DUP2 ADD SWAP2 ADD PUSH2 0x1C9E JUMP JUMPDEST PUSH0 DUP12 DUP2 PUSH2 0x14B6 JUMP JUMPDEST SWAP1 SWAP3 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x14FF JUMPI JUMPDEST PUSH2 0x14EF DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x128D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14E5 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1549 JUMPI JUMPDEST PUSH2 0x152A DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1545 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1545 JUMPI DUP2 DUP10 SWAP2 PUSH0 PUSH2 0x123D JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1520 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP6 SWAP8 POP POP SWAP5 POP POP POP POP PUSH2 0x156E SWAP4 POP PUSH2 0x1CB6 JUMP JUMPDEST PUSH2 0x1401 JUMP JUMPDEST DUP8 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP9 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x15C6 JUMPI JUMPDEST PUSH2 0x15B6 DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP8 PUSH0 PUSH2 0x118F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x15AC JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x15E1 SWAP1 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x15EC JUMPI DUP11 PUSH0 PUSH2 0x116D JUMP JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP12 DUP1 REVERT JUMPDEST PUSH2 0x160A SWAP2 SWAP13 POP PUSH2 0x186E JUMP JUMPDEST PUSH0 SWAP11 PUSH0 PUSH2 0x1115 JUMP JUMPDEST SWAP1 SWAP5 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x163A JUMPI JUMPDEST PUSH2 0x162A DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x10BF JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1620 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x1686 JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0x1079 JUMPI DUP8 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP10 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0x16CA PUSH2 0x1982 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH2 0x172F PUSH1 0x20 SWAP2 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x17B5 PUSH2 0x1828 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17D9 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP3 PUSH2 0x19FA JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1A2B JUMPI JUMPDEST DUP2 PUSH2 0x1A16 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1A09 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1A82 JUMPI POP POP JUMP JUMPDEST PUSH2 0x1AAE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x190C JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xAE3 JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x1BC3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP3 PUSH2 0x1B96 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1B6E JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1BB5 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x1BBC JUMPI JUMPDEST PUSH2 0x1BAD DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1C9E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1B65 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1BA3 JUMP JUMPDEST PUSH2 0x1BDA SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xF6B JUMPI PUSH2 0xF5C DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST PUSH0 PUSH2 0x1B17 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1C0D JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1C9C SWAP2 PUSH2 0x1C97 PUSH1 0x64 DUP4 PUSH2 0x18CB JUMP JUMPDEST PUSH2 0x1D14 JUMP JUMPDEST JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1F7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1D03 DUP8 DUP3 DUP5 PUSH2 0x1C35 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1D4A SWAP4 AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP7 GAS CALL PUSH2 0x1D43 PUSH2 0x1DA6 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x1E03 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1D8B JUMPI JUMPDEST POP POP PUSH2 0x1D60 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1D9E SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1C9E JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x1D57 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1DFE JUMPI RETURNDATASIZE SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1882 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1DF3 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x18CB JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x1E40 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x1E18 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1E93 JUMPI JUMPDEST PUSH2 0x1E51 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x1E49 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE SELFBALANCE 0x29 SLT 0xC2 SWAP7 0xE5 PUSH32 0xF09E9ED02D2549F7E0085A6BCB427EB96E6A717E1205A70364736F6C63430008 SHL STOP CALLER ","sourceMap":"1713:10354:71:-:0;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;-1:-1:-1;;;;;1713:10354:71;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1713:10354:71;;;;;;;;;;;;;;;;;;;;;922:4:45;1347:46:33;;943:28:43;939:79;;1028:14;;9350:26:71;;9346:85;;1713:10354;;;-1:-1:-1;;;;;;1713:10354:71;;;;;;;;9485:29;-1:-1:-1;;9485:29:71;1713:10354;;;;;;1347:46:33;1713:10354:71;;;;;1028:14:43;1713:10354:71;;;;;;;;;;;;;;;;;;;;;9346:85;9399:21;;;-1:-1:-1;9399:21:71;;-1:-1:-1;9399:21:71;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;1713:10354:71;-1:-1:-1;1713:10354:71;;;;;;-1:-1:-1;1713:10354:71;;;;;-1:-1:-1;1713:10354:71"},"deployedBytecode":{"functionDebugData":{"abi_decode_bool_fromMemory":{"entryPoint":7326,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6707,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":6184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IProtocolFeeBurner":{"entryPoint":6219,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"extract_returndata":{"entryPoint":7590,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":6347,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_23313":{"entryPoint":6319,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_9061":{"entryPoint":6254,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":7444,"id":9934,"parameterSlots":2,"returnSlots":0},"fun_ensureAuthenticatedByRole":{"entryPoint":6751,"id":6868,"parameterSlots":2,"returnSlots":0},"fun_getActionId":{"entryPoint":6412,"id":4148,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":6530,"id":16308,"parameterSlots":0,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":7136,"id":6320,"parameterSlots":0,"returnSlots":0},"fun_safeTransfer":{"entryPoint":7221,"id":9744,"parameterSlots":3,"returnSlots":0},"fun_transferFeeToken":{"entryPoint":7350,"id":16295,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":7683,"id":10196,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":6455}],"6692":[{"length":32,"start":3846},{"length":32,"start":4072},{"length":32,"start":6597},{"length":32,"start":6881}]},"linkReferences":{},"object":"608060405260048036101561009e575b36156100785734610078576064906020604051917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b7ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb001461179c5780634ccb20c01461176957806380db0d5114611737578063851c1bb3146116e857806385f2dbd4146116b057806388f6d2a41461100c5780638d928af814610fbc5780639c5cee9b14610f72578063aaabadc514610eb2578063b0edcc5314610caa578063b11f061e14610bd3578063b974699514610300578063e20c482f146101fb5763e74b981b0361000f57346101f75760206003193601126101f757610155611828565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017b82841630611a5f565b169182156101d157507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101f75760206003193601126101f757610215611828565b73ffffffffffffffffffffffffffffffffffffffff90610239826001541630611a5f565b1690815f52600260205260ff60405f2054166102d75781156102b15750805f52600260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b7f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101f75760a06003193601126101f75761031a611828565b6024359073ffffffffffffffffffffffffffffffffffffffff8216908183036101f75761034561184b565b9161034e611be0565b61037073ffffffffffffffffffffffffffffffffffffffff6001541630611a5f565b83925f9173ffffffffffffffffffffffffffffffffffffffff8216610b22575b6040517f70a0823100000000000000000000000000000000000000000000000000000000968782523089830152602082602481865afa918215610ae3575f92610aee575b5073ffffffffffffffffffffffffffffffffffffffff6103f2611982565b16803b156101f7576040517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88168b8201525f8160248183865af18015610ae357610ad0575b50803b15610acc578573ffffffffffffffffffffffffffffffffffffffff606489838e9560405196879586947fb53a70b200000000000000000000000000000000000000000000000000000000865216908401523060248401528960448401525af180156109c857908691610ab4575b50506040519788523089890152602088602481865afa978815610aa9578598610a75575b5081880391888311610a495782980361051c575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b73ffffffffffffffffffffffffffffffffffffffff841615610a335750835473ffffffffffffffffffffffffffffffffffffffff16918083036105a257505050508061057b575061056d9350611cb6565b5f80808080808080806104f7565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b84979395946108df575b50506040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff85166024820152604480820184905281526106086064826118cb565b86808251602084018273ffffffffffffffffffffffffffffffffffffffff8b165af1610632611da6565b816108b0575b5080610890575b1561081f575b5073ffffffffffffffffffffffffffffffffffffffff600154169173ffffffffffffffffffffffffffffffffffffffff85163b1561081b5773ffffffffffffffffffffffffffffffffffffffff604051947fde557a32000000000000000000000000000000000000000000000000000000008652168885015273ffffffffffffffffffffffffffffffffffffffff8616602485015260448401526064830152604435608483015260a482015260643560c4820152838160e4818373ffffffffffffffffffffffffffffffffffffffff87165af18015610810579084916107f8575b505073ffffffffffffffffffffffffffffffffffffffff60446020928260405195869485937fdd62ed3e000000000000000000000000000000000000000000000000000000008552308b860152166024840152165afa9081156107ed5782916107bb575b5061079657505061056d565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90506020813d6020116107e5575b816107d6602093836118cb565b810103126101f757515f61078a565b3d91506107c9565b6040513d84823e3d90fd5b6108019061186e565b61080c57825f610726565b8280fd5b6040513d86823e3d90fd5b8680fd5b61088a906108846040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881660248201528960448201526044815261087e816118af565b88611d14565b86611d14565b5f610645565b5073ffffffffffffffffffffffffffffffffffffffff86163b151561063f565b80518015925082156108c5575b50505f610638565b6108d89250602080918301019101611c9e565b5f806108bd565b91925094506040517f38d52e0f0000000000000000000000000000000000000000000000000000000081526020818981855afa908115610a28579087929183916109d3575b5090606473ffffffffffffffffffffffffffffffffffffffff602093169760405194859384927fba0876520000000000000000000000000000000000000000000000000000000084528d8401523060248401523060448401525af19081156109c8578691610996575b50905f806105ac565b90506020813d6020116109c0575b816109b1602093836118cb565b810103126101f757515f61098d565b3d91506109a4565b6040513d88823e3d90fd5b919250506020813d602011610a20575b816109f0602093836118cb565b8101031261081b575173ffffffffffffffffffffffffffffffffffffffff8116810361081b578691906064610924565b3d91506109e3565b6040513d89823e3d90fd5b95509550505050610a449350611cb6565b61056d565b60248660118c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9097506020813d602011610aa1575b81610a91602093836118cb565b810103126101f75751965f6104e3565b3d9150610a84565b6040513d87823e3d90fd5b610abd9061186e565b610ac857845f6104bf565b8480fd5b8580fd5b610adb91965061186e565b5f945f61044f565b6040513d5f823e3d90fd5b9091506020813d602011610b1a575b81610b0a602093836118cb565b810103126101f75751905f6103d4565b3d9150610afd565b73ffffffffffffffffffffffffffffffffffffffff82165f52600260205260ff60405f2054165f14610b915773ffffffffffffffffffffffffffffffffffffffff5f541661039057867f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b8673ffffffffffffffffffffffffffffffffffffffff837f38553f6c000000000000000000000000000000000000000000000000000000005f5216905260245ffd5b50346101f75760206003193601126101f757610bed611828565b73ffffffffffffffffffffffffffffffffffffffff90610c11826001541630611a5f565b1690815f52600260205260ff60405f20541615610c815750805f52600260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b7fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101f7576020806003193601126101f75781359167ffffffffffffffff918284116101f757366023850112156101f75783820135926024908411610e86576005948460051b60405195610d01858301886118cb565b8652602484870191830101913683116101f757602401905b828210610e5a57505050610d2b611be0565b73ffffffffffffffffffffffffffffffffffffffff9360019480600154163303610e335785965f965b610d7d575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251871015610e2e57818588831b850101511696604051977f70a0823100000000000000000000000000000000000000000000000000000000895230888a015286898781845afa8015610ae3578a995f91610df9575b5090818a9392610de7575b50500196610d54565b610df2913390611c35565b5f80610dde565b8093929a50888092503d8311610e27575b610e1481836118cb565b810103126101f757905189989089610dd3565b503d610e0a565b6104f7565b847f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101f7578152908401908401610d19565b6041837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101f7575f6003193601126101f75773ffffffffffffffffffffffffffffffffffffffff602060405180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa908115610ae3576020925f92610f43575b5060405191168152f35b610f64919250833d8511610f6b575b610f5c81836118cb565b810190611a33565b905f610f39565b503d610f52565b346101f75760206003193601126101f75773ffffffffffffffffffffffffffffffffffffffff610fa0611828565b165f526002602052602060ff60405f2054166040519015158152f35b346101f7575f6003193601126101f757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101f75760a06003193601126101f757611026611828565b60249081359073ffffffffffffffffffffffffffffffffffffffff8083168093036101f75761105361184b565b9361105c611be0565b61106a826001541630611a5f565b815f9516918215159485611641575b604051917f70a082310000000000000000000000000000000000000000000000000000000095868452308a85015260209788858781875afa948515610ae3575f95611612575b50826110c9611982565b1694853b156101f7578b956040517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015610ae3576115ff575b50803b156115fb578b8760648f8360405195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156115f057908c916115d8575b5050604051988952308c8a015289898881885afa9889156115cd578b9961159e575b5080890398808a1161157357036111c5575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561155b575087548116908282036111fe5789897fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b6040517f38d52e0f00000000000000000000000000000000000000000000000000000000815288818c81875afa90811561155057899183918c91611511575b50169760648c8c60405197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156115065789936114d7575b50604080517f095ea7b300000000000000000000000000000000000000000000000000000000818b0181815273ffffffffffffffffffffffffffffffffffffffff8a16838a019081526020810188905291938d9283929161131791869101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856118cb565b835190828d5af1611326611da6565b816114a7575b508061149d575b15611469575b50506001541691853b1561146557604051937fde557a320000000000000000000000000000000000000000000000000000000085528a850152868585015260448401526064830152604435608483015260a482015260643560c4820152858160e48183875af180156109c85785939291879161144a575b505060449060405194859384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308b8501528301525afa91821561143f578392611411575b50506107965750505b5f808080808080808080806104f7565b90809250813d8311611438575b61142881836118cb565b810103126101f757515f806113f8565b503d61141e565b6040513d85823e3d90fd5b611457919293945061186e565b610ac857908391855f6113b0565b8880fd5b61087e61149692604051908c82015289898201528c604482015260448152611490816118af565b8a611d14565b5f80611339565b50883b1515611333565b8051801592508c9083156114bf575b5050505f61132c565b6114cf9350820181019101611c9e565b5f8b816114b6565b9092508781813d83116114ff575b6114ef81836118cb565b810103126101f75751915f61128d565b503d6114e5565b6040513d8b823e3d90fd5b928092508391503d8311611549575b61152a81836118cb565b8101031261154557518181168103611545578189915f61123d565b8980fd5b503d611520565b6040513d8c823e3d90fd5b95975050945050505061156e9350611cb6565b611401565b878c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9098508981813d83116115c6575b6115b681836118cb565b810103126101f75751975f61118f565b503d6115ac565b6040513d8d823e3d90fd5b6115e19061186e565b6115ec578a5f61116d565b8a80fd5b6040513d8e823e3d90fd5b8b80fd5b61160a919c5061186e565b5f9a5f611115565b9094508881813d831161163a575b61162a81836118cb565b810103126101f75751935f6110bf565b503d611620565b835f52600260205260ff60405f2054165f1461168657815f541661107957877f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b8284897f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b346101f7575f6003193601126101f75760206116ca611982565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b50346101f75760206003193601126101f757357fffffffff00000000000000000000000000000000000000000000000000000000811681036101f75761172f60209161190c565b604051908152f35b346101f7575f6003193601126101f757602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101f7575f6003193601126101f757602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101f75760206003193601126101f7576117b5611828565b73ffffffffffffffffffffffffffffffffffffffff906117d9826001541630611a5f565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b67ffffffffffffffff811161188257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761188257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761188257604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176118825760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610ae3575f926119fa57505090565b9091506020813d602011611a2b575b81611a16602093836118cb565b810103126101f7575190811681036101f75790565b3d9150611a09565b908160209103126101f7575173ffffffffffffffffffffffffffffffffffffffff811681036101f75790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611a82575050565b611aae7fffffffff000000000000000000000000000000000000000000000000000000005f351661190c565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa908115610ae3578460649287955f91611bc3575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa918215610ae3575f92611b96575b505015611b6e57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b611bb59250803d10611bbc575b611bad81836118cb565b810190611c9e565b5f80611b65565b503d611ba3565b611bda9150863d8811610f6b57610f5c81836118cb565b5f611b17565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611c0d576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611c9c91611c976064836118cb565b611d14565b565b908160209103126101f7575180151581036101f75790565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611d03878284611c35565b8451968752602087015216941692a3565b5f8073ffffffffffffffffffffffffffffffffffffffff611d4a93169360208151910182865af1611d43611da6565b9083611e03565b8051908115159182611d8b575b5050611d605750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b611d9e9250602080918301019101611c9e565b155f80611d57565b3d15611dfe573d9067ffffffffffffffff82116118825760405191611df360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846118cb565b82523d5f602084013e565b606090565b90611e405750805115611e1857805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611e93575b611e51575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611e4956fea26469706673582212203d472912c296e57ff09e9ed02d2549f7e0085a6bcb427eb96e6a717e1205a70364736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x9E JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x78 JUMPI CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x64 SWAP1 PUSH1 0x20 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x179C JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1769 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x1737 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x16E8 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x16B0 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0x100C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xFBC JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xF72 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xEB2 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xCAA JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xBD3 JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FB JUMPI PUSH4 0xE74B981B SUB PUSH2 0xF JUMPI CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x155 PUSH2 0x1828 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17B DUP3 DUP5 AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D1 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x215 PUSH2 0x1828 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x239 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP2 ISZERO PUSH2 0x2B1 JUMPI POP DUP1 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x31A PUSH2 0x1828 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x1F7 JUMPI PUSH2 0x345 PUSH2 0x184B JUMP JUMPDEST SWAP2 PUSH2 0x34E PUSH2 0x1BE0 JUMP JUMPDEST PUSH2 0x370 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST DUP4 SWAP3 PUSH0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB22 JUMPI JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP3 MSTORE ADDRESS DUP10 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP3 PUSH2 0xAEE JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F2 PUSH2 0x1982 JUMP JUMPDEST AND DUP1 EXTCODESIZE ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP12 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xAE3 JUMPI PUSH2 0xAD0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xACC JUMPI DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x64 DUP10 DUP4 DUP15 SWAP6 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND SWAP1 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP10 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x9C8 JUMPI SWAP1 DUP7 SWAP2 PUSH2 0xAB4 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD SWAP8 DUP9 MSTORE ADDRESS DUP10 DUP10 ADD MSTORE PUSH1 0x20 DUP9 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0xAA9 JUMPI DUP6 SWAP9 PUSH2 0xA75 JUMPI JUMPDEST POP DUP2 DUP9 SUB SWAP2 DUP9 DUP4 GT PUSH2 0xA49 JUMPI DUP3 SWAP9 SUB PUSH2 0x51C JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO PUSH2 0xA33 JUMPI POP DUP4 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 DUP1 DUP4 SUB PUSH2 0x5A2 JUMPI POP POP POP POP DUP1 PUSH2 0x57B JUMPI POP PUSH2 0x56D SWAP4 POP PUSH2 0x1CB6 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x4F7 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST DUP5 SWAP8 SWAP4 SWAP6 SWAP5 PUSH2 0x8DF JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP2 MSTORE PUSH2 0x608 PUSH1 0x64 DUP3 PUSH2 0x18CB JUMP JUMPDEST DUP7 DUP1 DUP3 MLOAD PUSH1 0x20 DUP5 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND GAS CALL PUSH2 0x632 PUSH2 0x1DA6 JUMP JUMPDEST DUP2 PUSH2 0x8B0 JUMPI JUMPDEST POP DUP1 PUSH2 0x890 JUMPI JUMPDEST ISZERO PUSH2 0x81F JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE ISZERO PUSH2 0x81B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND DUP9 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0xE4 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND GAS CALL DUP1 ISZERO PUSH2 0x810 JUMPI SWAP1 DUP5 SWAP2 PUSH2 0x7F8 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 PUSH1 0x20 SWAP3 DUP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS DUP12 DUP7 ADD MSTORE AND PUSH1 0x24 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7ED JUMPI DUP3 SWAP2 PUSH2 0x7BB JUMPI JUMPDEST POP PUSH2 0x796 JUMPI POP POP PUSH2 0x56D JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7E5 JUMPI JUMPDEST DUP2 PUSH2 0x7D6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 PUSH2 0x78A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x7C9 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x801 SWAP1 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x80C JUMPI DUP3 PUSH0 PUSH2 0x726 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x88A SWAP1 PUSH2 0x884 PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x24 DUP3 ADD MSTORE DUP10 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x87E DUP2 PUSH2 0x18AF JUMP JUMPDEST DUP9 PUSH2 0x1D14 JUMP JUMPDEST DUP7 PUSH2 0x1D14 JUMP JUMPDEST PUSH0 PUSH2 0x645 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND EXTCODESIZE ISZERO ISZERO PUSH2 0x63F JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP3 ISZERO PUSH2 0x8C5 JUMPI JUMPDEST POP POP PUSH0 PUSH2 0x638 JUMP JUMPDEST PUSH2 0x8D8 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1C9E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x8BD JUMP JUMPDEST SWAP2 SWAP3 POP SWAP5 POP PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP10 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA28 JUMPI SWAP1 DUP8 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x9D3 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 SWAP4 AND SWAP8 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x9C8 JUMPI DUP7 SWAP2 PUSH2 0x996 JUMPI JUMPDEST POP SWAP1 PUSH0 DUP1 PUSH2 0x5AC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x9C0 JUMPI JUMPDEST DUP2 PUSH2 0x9B1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 PUSH2 0x98D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9A4 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP3 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA20 JUMPI JUMPDEST DUP2 PUSH2 0x9F0 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x81B JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x81B JUMPI DUP7 SWAP2 SWAP1 PUSH1 0x64 PUSH2 0x924 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9E3 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xA44 SWAP4 POP PUSH2 0x1CB6 JUMP JUMPDEST PUSH2 0x56D JUMP JUMPDEST PUSH1 0x24 DUP7 PUSH1 0x11 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP8 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAA1 JUMPI JUMPDEST DUP2 PUSH2 0xA91 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP7 PUSH0 PUSH2 0x4E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA84 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xABD SWAP1 PUSH2 0x186E JUMP JUMPDEST PUSH2 0xAC8 JUMPI DUP5 PUSH0 PUSH2 0x4BF JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST PUSH2 0xADB SWAP2 SWAP7 POP PUSH2 0x186E JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x44F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB1A JUMPI JUMPDEST DUP2 PUSH2 0xB0A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x3D4 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xAFD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0xB91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH2 0x390 JUMPI DUP7 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0xBED PUSH2 0x1828 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xC11 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xC81 JUMPI POP DUP1 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1F7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x24 SWAP1 DUP5 GT PUSH2 0xE86 JUMPI PUSH1 0x5 SWAP5 DUP5 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP6 PUSH2 0xD01 DUP6 DUP4 ADD DUP9 PUSH2 0x18CB JUMP JUMPDEST DUP7 MSTORE PUSH1 0x24 DUP5 DUP8 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE5A JUMPI POP POP POP PUSH2 0xD2B PUSH2 0x1BE0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xE33 JUMPI DUP6 SWAP7 PUSH0 SWAP7 JUMPDEST PUSH2 0xD7D JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP8 LT ISZERO PUSH2 0xE2E JUMPI DUP2 DUP6 DUP9 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP7 PUSH1 0x40 MLOAD SWAP8 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP10 MSTORE ADDRESS DUP9 DUP11 ADD MSTORE DUP7 DUP10 DUP8 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0xAE3 JUMPI DUP11 SWAP10 PUSH0 SWAP2 PUSH2 0xDF9 JUMPI JUMPDEST POP SWAP1 DUP2 DUP11 SWAP4 SWAP3 PUSH2 0xDE7 JUMPI JUMPDEST POP POP ADD SWAP7 PUSH2 0xD54 JUMP JUMPDEST PUSH2 0xDF2 SWAP2 CALLER SWAP1 PUSH2 0x1C35 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xDDE JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP11 POP DUP9 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xE27 JUMPI JUMPDEST PUSH2 0xE14 DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI SWAP1 MLOAD DUP10 SWAP9 SWAP1 DUP10 PUSH2 0xDD3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE0A JUMP JUMPDEST PUSH2 0x4F7 JUMP JUMPDEST DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0xD19 JUMP JUMPDEST PUSH1 0x41 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xAE3 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF43 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF64 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF6B JUMPI JUMPDEST PUSH2 0xF5C DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1A33 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xF39 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF52 JUMP JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xFA0 PUSH2 0x1828 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x1026 PUSH2 0x1828 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x1F7 JUMPI PUSH2 0x1053 PUSH2 0x184B JUMP JUMPDEST SWAP4 PUSH2 0x105C PUSH2 0x1BE0 JUMP JUMPDEST PUSH2 0x106A DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST DUP2 PUSH0 SWAP6 AND SWAP2 DUP3 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x1641 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP6 DUP7 DUP5 MSTORE ADDRESS DUP11 DUP6 ADD MSTORE PUSH1 0x20 SWAP8 DUP9 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP6 PUSH2 0x1612 JUMPI JUMPDEST POP DUP3 PUSH2 0x10C9 PUSH2 0x1982 JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1F7 JUMPI DUP12 SWAP6 PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xAE3 JUMPI PUSH2 0x15FF JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x15FB JUMPI DUP12 DUP8 PUSH1 0x64 DUP16 DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x15F0 JUMPI SWAP1 DUP13 SWAP2 PUSH2 0x15D8 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD SWAP9 DUP10 MSTORE ADDRESS DUP13 DUP11 ADD MSTORE DUP10 DUP10 DUP9 DUP2 DUP9 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x15CD JUMPI DUP12 SWAP10 PUSH2 0x159E JUMPI JUMPDEST POP DUP1 DUP10 SUB SWAP9 DUP1 DUP11 GT PUSH2 0x1573 JUMPI SUB PUSH2 0x11C5 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x155B JUMPI POP DUP8 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x11FE JUMPI DUP10 DUP10 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP9 DUP2 DUP13 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1550 JUMPI DUP10 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x1511 JUMPI JUMPDEST POP AND SWAP8 PUSH1 0x64 DUP13 DUP13 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x1506 JUMPI DUP10 SWAP4 PUSH2 0x14D7 JUMPI JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP12 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP4 DUP11 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE SWAP2 SWAP4 DUP14 SWAP3 DUP4 SWAP3 SWAP2 PUSH2 0x1317 SWAP2 DUP7 SWAP2 ADD SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x18CB JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH2 0x1326 PUSH2 0x1DA6 JUMP JUMPDEST DUP2 PUSH2 0x14A7 JUMPI JUMPDEST POP DUP1 PUSH2 0x149D JUMPI JUMPDEST ISZERO PUSH2 0x1469 JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x1465 JUMPI PUSH1 0x40 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP11 DUP6 ADD MSTORE DUP7 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP6 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x9C8 JUMPI DUP6 SWAP4 SWAP3 SWAP2 DUP8 SWAP2 PUSH2 0x144A JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x143F JUMPI DUP4 SWAP3 PUSH2 0x1411 JUMPI JUMPDEST POP POP PUSH2 0x796 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x4F7 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1438 JUMPI JUMPDEST PUSH2 0x1428 DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 DUP1 PUSH2 0x13F8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141E JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x1457 SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x186E JUMP JUMPDEST PUSH2 0xAC8 JUMPI SWAP1 DUP4 SWAP2 DUP6 PUSH0 PUSH2 0x13B0 JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST PUSH2 0x87E PUSH2 0x1496 SWAP3 PUSH1 0x40 MLOAD SWAP1 DUP13 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP13 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1490 DUP2 PUSH2 0x18AF JUMP JUMPDEST DUP11 PUSH2 0x1D14 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1339 JUMP JUMPDEST POP DUP9 EXTCODESIZE ISZERO ISZERO PUSH2 0x1333 JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO SWAP3 POP DUP13 SWAP1 DUP4 ISZERO PUSH2 0x14BF JUMPI JUMPDEST POP POP POP PUSH0 PUSH2 0x132C JUMP JUMPDEST PUSH2 0x14CF SWAP4 POP DUP3 ADD DUP2 ADD SWAP2 ADD PUSH2 0x1C9E JUMP JUMPDEST PUSH0 DUP12 DUP2 PUSH2 0x14B6 JUMP JUMPDEST SWAP1 SWAP3 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x14FF JUMPI JUMPDEST PUSH2 0x14EF DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x128D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14E5 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1549 JUMPI JUMPDEST PUSH2 0x152A DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1545 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1545 JUMPI DUP2 DUP10 SWAP2 PUSH0 PUSH2 0x123D JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1520 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP6 SWAP8 POP POP SWAP5 POP POP POP POP PUSH2 0x156E SWAP4 POP PUSH2 0x1CB6 JUMP JUMPDEST PUSH2 0x1401 JUMP JUMPDEST DUP8 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP9 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x15C6 JUMPI JUMPDEST PUSH2 0x15B6 DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP8 PUSH0 PUSH2 0x118F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x15AC JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x15E1 SWAP1 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x15EC JUMPI DUP11 PUSH0 PUSH2 0x116D JUMP JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP12 DUP1 REVERT JUMPDEST PUSH2 0x160A SWAP2 SWAP13 POP PUSH2 0x186E JUMP JUMPDEST PUSH0 SWAP11 PUSH0 PUSH2 0x1115 JUMP JUMPDEST SWAP1 SWAP5 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x163A JUMPI JUMPDEST PUSH2 0x162A DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x10BF JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1620 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x1686 JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0x1079 JUMPI DUP8 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP10 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0x16CA PUSH2 0x1982 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH2 0x172F PUSH1 0x20 SWAP2 PUSH2 0x190C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x17B5 PUSH2 0x1828 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17D9 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1A5F JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1882 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP3 PUSH2 0x19FA JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1A2B JUMPI JUMPDEST DUP2 PUSH2 0x1A16 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1A09 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1A82 JUMPI POP POP JUMP JUMPDEST PUSH2 0x1AAE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x190C JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xAE3 JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x1BC3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xAE3 JUMPI PUSH0 SWAP3 PUSH2 0x1B96 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1B6E JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1BB5 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x1BBC JUMPI JUMPDEST PUSH2 0x1BAD DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1C9E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1B65 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1BA3 JUMP JUMPDEST PUSH2 0x1BDA SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xF6B JUMPI PUSH2 0xF5C DUP2 DUP4 PUSH2 0x18CB JUMP JUMPDEST PUSH0 PUSH2 0x1B17 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1C0D JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1C9C SWAP2 PUSH2 0x1C97 PUSH1 0x64 DUP4 PUSH2 0x18CB JUMP JUMPDEST PUSH2 0x1D14 JUMP JUMPDEST JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1F7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1D03 DUP8 DUP3 DUP5 PUSH2 0x1C35 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1D4A SWAP4 AND SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP7 GAS CALL PUSH2 0x1D43 PUSH2 0x1DA6 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x1E03 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1D8B JUMPI JUMPDEST POP POP PUSH2 0x1D60 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1D9E SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x1C9E JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x1D57 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1DFE JUMPI RETURNDATASIZE SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1882 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1DF3 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x18CB JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x1E40 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x1E18 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1E93 JUMPI JUMPDEST PUSH2 0x1E51 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x1E49 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE SELFBALANCE 0x29 SLT 0xC2 SWAP7 0xE5 PUSH32 0xF09E9ED02D2549F7E0085A6BCB427EB96E6A717E1205A70364736F6C63430008 SHL STOP CALLER ","sourceMap":"1713:10354:71:-:0;;;;;;;;;;-1:-1:-1;1713:10354:71;;;;11958:9;11954:69;;1713:10354;;;;;12033:25;;;;;;1713:10354;;;;;;;;;;;12033:25;11954:69;11994:18;11970:1;11994:18;11970:1;11994:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;1713:10354:71;1424:26:45;;;1713:10354:71;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;:::i;:::-;2533:13;1713:10354;;;;2533:13;1713:10354;;;2526:4;2533:13;:::i;:::-;1713:10354;9350:26;;;9346:85;;-1:-1:-1;1713:10354:71;;;;2533:13;1713:10354;9485:29;1713:10354;;9485:29;1713:10354;9346:85;9399:21;1713:10354;9399:21;1713:10354;9399:21;1713:10354;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;9901:19;1713:10354;;;;;;;;9897:133;;10159:40;;10155:104;;1713:10354;;;;9901:19;1713:10354;;;;;2533:13;1713:10354;;;;;;;10330:50;1713:10354;10330:50;;1713:10354;10155:104;10222:26;1713:10354;10222:26;1713:10354;10222:26;9897:133;9962:57;1713:10354;9962:57;1713:10354;;;9962:57;1713:10354;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1083:103:40;;;:::i;:::-;2533:13:71;1713:10354;;;;2526:4;2533:13;:::i;:::-;3187:5;3633:3050;1713:10354;;;;;7041:318;;1713:10354;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;1713:10354;3964:33;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;1713:10354;4245:26;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;4428:40;;1713:10354;;;4428:40;;;1713:10354;;4428:40;1713:10354;4428:40;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;;4572:73;;;;;1713:10354;4572:73;;1713:10354;4572:73;;;1713:10354;2526:4;1713:10354;;;;;;;;;4572:73;;;;;;;;;;;1713:10354;;;;;4683:33;;;2526:4;4683:33;;;1713:10354;3964:33;4683;1713:10354;4683:33;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4656:78;4749:20;;4745:1932;;1713:10354;;551:66:40;3051:52:41;1713:10354:71;4745:1932;1713:10354;;;6823:32;1713:10354;;-1:-1:-1;1713:10354:71;;;;;4986:23;;;1713:10354;;5033:94;;;;;;;5183:16;;;;;:::i;:::-;4745:1932;;;;;;;;;;;5033:94;5084:20;;;;;;4982:1488;5247:296;;;;;;;4982:1488;-1:-1:-1;;1713:10354:71;;;3964:33;3411:47:55;;;1713:10354:71;;;;3411:47:55;;1713:10354:71;;;;;;;;3411:47:55;;;1713:10354:71;;3411:47:55;:::i;:::-;5615:25;;;;3964:33:71;3411:47:55;;1713:10354:71;;;;5615:25:55;;;;:::i;:::-;5657:69;;;4982:1488:71;5657:103:55;;;;4982:1488:71;3473:45:55;3469:201;;4982:1488:71;1713:10354;;;;;;;;;5979:301;;;;1713:10354;;;5979:301;1713:10354;5979:301;;1713:10354;5979:301;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;;;;;;;;;;4982:1488;1713:10354;;;;3964:33;1713:10354;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;;;;6307:53;;;;;;;;;;;4982:1488;6307:57;6303:149;;4982:1488;;;;6303:149;6399:30;;;;6307:53;;;3964:33;6307:53;;3964:33;6307:53;;;;;;3964:33;6307:53;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;-1:-1:-1;6307:53:71;;;1713:10354;;;;;;;;;5979:301;;;;:::i;:::-;1713:10354;;5979:301;;;;1713:10354;;;;5979:301;1713:10354;;;;;;;;;5979:301;1713:10354;;;3469:201:55;3646:12;1713:10354:71;3561:43:55;1713:10354:71;;;3964:33;3561:43:55;;;1713:10354:71;;;;3561:43:55;;1713:10354:71;;;;;;;3561:43:55;;;;;:::i;:::-;;;:::i;:::-;3646:12;;:::i;:::-;3469:201;;;5657:103;1713:10354:71;;;;5730:26:55;:30;;5657:103;;:69;1713:10354:71;;5669:22:55;;;-1:-1:-1;5669:56:55;;;;5657:69;;;;;;5669:56;5695:30;;;3964:33:71;5695:30:55;;;;;;;;:::i;:::-;5669:56;;;;5247:296:71;1713:10354;;;;;;;;5387:20;;3964:33;5387:20;;;;;;;;;;;;;;;;;;;5247:296;1713:10354;;;;3964:33;1713:10354;;;;;5453:67;;;;;1713:10354;5453:67;;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;;;;;;;;5247:296;5434:86;5247:296;;;;;5453:67;;;3964:33;5453:67;;3964:33;5453:67;;;;;;3964:33;5453:67;;;:::i;:::-;;;1713:10354;;;;;5453:67;;;;;;-1:-1:-1;5453:67:71;;;1713:10354;;;;;;;;;5387:20;;;;;3964:33;5387:20;;3964:33;5387:20;;;;;;3964:33;5387:20;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;1713:10354;5387:20;;;;;-1:-1:-1;5387:20:71;;;1713:10354;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;4683:33;;;;3964;4683;;3964;4683;;;;;;3964;4683;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;-1:-1:-1;4683:33:71;;;1713:10354;;;;;;;;;4572:73;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;4572:73;1713:10354;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;-1:-1:-1;3964:33:71;;7041:318;1713:10354;;;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;1713:10354;7286:48;;1713:10354;7286:48;1713:10354;;;;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;10556:19;1713:10354;;;;;;;;;10552:138;;1713:10354;;;;10556:19;1713:10354;;;;;;;;;;;10762:52;1713:10354;10762:52;;1713:10354;10552:138;10626:53;1713:10354;10626:53;1713:10354;;;10626:53;1713:10354;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:40;;;;;:::i;:::-;1713:10354:71;10973:13;;1713:10354;;10973:13;1713:10354;;10959:10;:27;10955:83;;11053:13;;1713:10354;11048:288;10973:13;;;1713:10354;551:66:40;3051:52:41;1713:10354:71;11090:3;1713:10354;;11068:20;;;;;1713:10354;;;;;;;;;;;;;11176:33;1713:10354;11176:33;;11203:4;11176:33;;;1713:10354;11176:33;;;;;;;;;;;;;1713:10354;11176:33;;;11090:3;11228:16;;;;;;11224:102;;11090:3;;;1713:10354;11053:13;;;11224:102;11298:12;10959:10;;11298:12;;:::i;:::-;11224:102;;;;11176:33;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;11176:33;;;;;;;11068:20;;;10955:83;11009:18;;1713:10354;11009:18;1713:10354;11009:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;1424:26:45;1713:10354:71;;1424:26:45;;1713:10354:71;1424:26:45;;1124:6:43;;;1713:10354:71;1424:26:45;;;;;;;;;1713:10354:71;1424:26:45;;;1713:10354:71;;;;;;;;;1424:26:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1713:10354:71;;;;;-1:-1:-1;;1713:10354:71;;;;;;;;:::i;:::-;;;;8290:19;1713:10354;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;;;1124:6:43;1713:10354:71;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:40;;;:::i;:::-;2533:13:71;1713:10354;;;;2526:4;2533:13;:::i;:::-;3898:29;1713:10354;;;6823:32;;;;7041:318;;;;1713:10354;;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;;1713:10354;;;;;;;;;4572:73;;;;;;;;;;;1713:10354;;;;;4683:33;;;2526:4;4683:33;;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4749:20;4745:1932;;1713:10354;551:66:40;3051:52:41;1713:10354:71;4745:1932;4785:1882;;;-1:-1:-1;1713:10354:71;;;;;4986:23;;;1713:10354;;5084:20;;;;;;4982:1488;1713:10354;;;5387:20;;;;;;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;;;5453:67;;;;;1713:10354;5453:67;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;;;;;;;;4982:1488;-1:-1:-1;1713:10354:71;;;;3411:47:55;;;;;;1713:10354:71;;;3411:47:55;;;1713:10354:71;;;;;;;;;;;;;;;3411:47:55;;;1713:10354:71;;;3411:47:55;;;;;;;;:::i;:::-;5615:25;;;;;;;;;:::i;:::-;5657:69;;;4982:1488:71;5657:103:55;;;;4982:1488:71;3473:45:55;3469:201;;4982:1488:71;1713:10354;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;4785:1882;4745:1932;;;;;;;;;;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;;1713:10354;;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;;1713:10354;;;3469:201:55;3561:43;3646:12;1713:10354:71;;;3561:43:55;;;;;;;;;1713:10354:71;;;;;;;3561:43:55;;;;;:::i;:::-;;;:::i;3646:12::-;3469:201;;;;5657:103;5730:26;;;:30;;5657:103;;:69;1713:10354:71;;5669:22:55;;;-1:-1:-1;5669:22:55;;:56;;;;5657:69;;;;;;;5669:56;5695:30;;-1:-1:-1;5695:30:55;;;;;;;:::i;:::-;5669:56;;;;;5453:67:71;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;5453:67;;;;;;;;;;1713:10354;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;1713:10354;;;;5387:20;;;;;;1713:10354;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;;1713:10354;;;;;;;;;4572:73;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;4572:73;1713:10354;;;;;;;;;4572:73;1713:10354;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;-1:-1:-1;;1713:10354:71;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;8114:13;1713:10354;;;;;;;;;;;;;-1:-1:-1;;1713:10354:71;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;;;;;9701:27;1713:10354;9701:27;;1713:10354;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1713:10354:71;;;2303:50:33;;;2320:22;;1713:10354:71;;;;;;;2303:50:33;;;1713:10354:71;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;7711:142:71:-;1713:10354;;;7809:37;;1713:10354;7809:37;1713:10354;7809:37;1713:10354;1124:6:43;1713:10354:71;;7809:37;;;;;;;-1:-1:-1;7809:37:71;;;7802:44;;7711:142;:::o;7809:37::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;7711:142;:::o;7809:37::-;;;-1:-1:-1;7809:37:71;;1713:10354;;;;;;;;;;;;;;;;;;:::o;2255:438:43:-;;1713:10354:71;;;;2444:10:43;:25;2440:180;;2255:438;;:::o;2440:180::-;2501:20;2513:7;;;;2501:20;:::i;:::-;1713:10354:71;;;1530:22:43;1713:10354:71;1530:22:43;;;:6;;;:22;:6;;;1713:10354:71;1530:22:43;;;;;;;;1713:10354:71;1530:22:43;;;2513:7;1530:22;;;2440:180;1713:10354:71;;;1530:59:43;;;;;1713:10354:71;1530:59:43;;:22;:59;;1713:10354:71;2444:10:43;1713:10354:71;;;;;;;;;;1530:59:43;;;;;;;2513:7;1530:59;;;2440:180;1713:10354:71;;;2485:125:43;;2255:438::o;2485:125::-;2577:18;2513:7;2577:18;1530:22;2513:7;2577:18;1530:59;;;;;;-1:-1:-1;1530:59:43;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;:22;;;;;;;;;;;;;;:::i;:::-;;;;1192:349:40;551:66;2806:53:41;;1316:93:40;;1529:4;3051:52:41;;1192:349:40:o;1316:93::-;1368:30;-1:-1:-1;1368:30:40;;-1:-1:-1;1368:30:40;1303:160:55;1713:10354:71;;;1412:43:55;;;;1713:10354:71;;;;;1412:43:55;;;1713:10354:71;;;;;;;;;1412:43:55;;;;;;1713:10354:71;;1412:43:55;:::i;:::-;;:::i;:::-;1303:160::o;1713:10354:71:-;;;;;;;;;;;;;;;;;;:::o;7371:294::-;;;1713:10354;7592:66;7371:294;1713:10354;;;;7498:13;1713:10354;;7554:21;;;;;:::i;:::-;1713:10354;;;;;;;;;;;;7592:66;;7371:294::o;4059:629:55:-;2847:1:56;4059:629:55;1713:10354:71;3510:55:56;4059:629:55;1713:10354:71;3462:31:56;;;;;;;;;;;;:::i;:::-;3510:55;;;:::i;:::-;1713:10354:71;;4551:22:55;;;;:57;;;;4059:629;4547:135;;;;4059:629;:::o;4547:135::-;4631:40;2847:1:56;4631:40:55;;1713:10354:71;;2847:1:56;4631:40:55;4551:57;4578:30;;;3462:31:56;4578:30:55;;;;;;;;:::i;:::-;4577:31;4551:57;;;;1713:10354:71;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;1713:10354:71;;;;:::o;:::-;;;:::o;4625:582:56:-;;4797:8;;-1:-1:-1;1713:10354:71;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;1713:10354:71;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;1713:10354:71;5121:24:56;;5066:1;5121:24;1713:10354:71;5121:24:56;1713:10354:71;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","getVault()":"8d928af8","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This withdraws all protocol fees previously collected and allocated to the protocol by the `ProtocolFeeController`, processes them with a configurable \\\"burner\\\" (e.g., from CowSwap) and forwards them to a recipient address. An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw, convert, and forward them to the final recipient.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"CannotReceiveEth()\":[{\"notice\":\"All pool tokens are ERC20, so this contract should not handle ETH.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"notice\":\"Withdraw protocol fees, convert them to a target token, and forward to a recipient.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeSweeper.sol\":\"ProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"contracts/ProtocolFeeSweeper.sol\":{\"keccak256\":\"0x111475fcdfd10e5e6c6b054e6b37cc5a89725050c73cfd338d13497a425931a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6dc090a277adf9e63a93f1f0db8e15ebfb354f30e415a5bc566087f6284beeb7\",\"dweb:/ipfs/QmRequjbKYe8nLLdkwqHEw6eakHLQe1MYAyRuQZj1zLM7y\"]}},\"version\":1}"}},"contracts/WeightedLPOracle.sol":{"WeightedLPOracle":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"contract IWeightedPool","name":"pool_","type":"address"},{"internalType":"contract AggregatorV3Interface[]","name":"feeds","type":"address[]"},{"internalType":"uint256","name":"version_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[],"name":"UnsupportedDecimals","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[{"internalType":"int256[]","name":"prices","type":"int256[]"}],"name":"calculateTVL","outputs":[{"internalType":"uint256","name":"tvl","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedData","outputs":[{"internalType":"int256[]","name":"prices","type":"int256[]"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedTokenDecimalScalingFactors","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeds","outputs":[{"internalType":"contract AggregatorV3Interface[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract IWeightedPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"array_allocation_size_array_contract_AggregatorV3Interface_dyn":{"entryPoint":2038,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":1983,"id":null,"parameterSlots":2,"returnSlots":0},"fun_computeFeedTokenDecimalScalingFactor":{"entryPoint":2207,"id":17309,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn":{"entryPoint":2190,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5621":{"entryPoint":2061,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5624":{"entryPoint":2094,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5627":{"entryPoint":2110,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5630":{"entryPoint":2126,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5633":{"entryPoint":2142,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5636":{"entryPoint":2158,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_5639":{"entryPoint":2174,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6104006040908082523461066757612751803803809161001f82856107bf565b833981016080828203126106675781516001600160a01b0392838216918281036106675760209586830151968688169788810361066757848301516001600160401b03919082811161066757860194601f96898888011215610667578651996100878b6107f6565b976100948851998a6107bf565b8b8952868901908760059d8e1b820101928311610667578701905b8282106107a7575050506060015160c05260805260a05282519863ca4f280360e01b8a525f8a60248160049a858c8301525afa998a15610710575f9a61071a575b50985f8798999a85519889809263f89f27ed60e01b82525afa968715610710575f97610688575b5051948560e052875f8b60a051168651928380926395d89b4160e01b82525afa90811561067e579084915f916105eb575b5060246101799187519381859251918291018984015e8101630bd554d160e21b88820152038b8101845201826107bf565b80519283116105d8575f54936001948581811c911680156105ce575b828210146105bb57838111610579575b508092841160011461051757509282939183925f9461050c575b50501b915f199060031b1c1916175f555b815183036104fe57866101e28361080d565b5116916102009283526101f48561080d565b5197610100988952610210816102098461080d565b511661089f565b956103009687526007826102238561082e565b5116966102209788526102358361082e565b519a6101209b8c5261024a856102098861082e565b9a6103209b8c52600283116104ca575b60038311610496575b8211610462575b811161042e575b600681116103fa575b116103c4575b5050505194611df09687610961883960805187818161012601526108ab015260a0518781816101000152818161068e0152610850015260c05187610558015260e05187818161027a0152818161036f015281816106400152818161080e0152610b6101525186610db501525185610de001526101405185610e1401526101605185610e4801526101805185610e7c01526101a05185610eb001526101c05185610ee701526101e05185610f1a0152518461109c015251836110c901526102405183611100015261026051836111370152610280518361116e01526102a051836111a501526102c051836111e001526102e051836112170152518261124d01525181611278015261034051816112ac015261036051816112e00152610380518161131401526103a0518161134801526103c0518161137f01526103e051816113b20152f35b826103e461020992846103d96103ee9761088e565b51166102e05261088e565b516101e05261088e565b6103e0525f8080610280565b836104048661087e565b51166102c0526104138361087e565b516101c052610425846102098761087e565b6103c05261027a565b836104388661086e565b51166102a0526104478361086e565b516101a052610459846102098761086e565b6103a052610271565b8461046c8761085e565b51166102805261047b8461085e565b516101805261048d856102098861085e565b6103805261026a565b856104a08861084e565b5116610260526104af8561084e565b51610160526104c1866102098961084e565b61036052610263565b856104d48861083e565b5116610240526104e38561083e565b51610140526104f5866102098961083e565b6103405261025a565b8463aaad13f760e01b5f525ffd5b015192505f806101bf565b919083601f1981165f8052845f20945f905b8883831061055f5750505010610547575b505050811b015f556101d0565b01515f1960f88460031b161c191690555f808061053a565b858701518855909601959485019487935090810190610529565b5f8052815f20848d818801901c8201928488106105b2575b018d1c019086905b8281106105a75750506101a5565b5f8155018690610599565b92508192610591565b60228b634e487b7160e01b5f525260245ffd5b90607f1690610195565b604189634e487b7160e01b5f525260245ffd5b9150503d805f833e6105fd81836107bf565b81019084818303126106675780519084821161066757018183820112156106675780519084821161066b5786519261063d838601601f19168801856107bf565b8284528683830101116106675785925f84846101799582602496018386015e830101529150610148565b5f80fd5b60418b634e487b7160e01b5f525260245ffd5b85513d5f823e3d90fd5b9096503d805f833e61069a81836107bf565b8101908381830312610667578051908382116106675701908087830112156106675781516106c7816107f6565b926106d4875194856107bf565b81845285808501928d1b8201019283116106675785809101915b8383106107005750505050955f610117565b82518152918101918691016106ee565b84513d5f823e3d90fd5b99503d805f8c3e61072b818c6107bf565b8a019983818c03126106675780519083821161066757019980878c011215610667578a51610758816107f6565b9b858088519e8f9061076a90826107bf565b84815201928c1b820101928311610667578501905b82821061078f575050505f6100f0565b81518c8116810361066757815290850190850161077f565b8151808f1681036106675781529087019087016100af565b601f909101601f19168101906001600160401b038211908210176107e257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116107e25760051b60200190565b80511561081a5760200190565b634e487b7160e01b5f52603260045260245ffd5b80516001101561081a5760400190565b80516002101561081a5760600190565b80516003101561081a5760800190565b80516004101561081a5760a00190565b80516005101561081a5760c00190565b80516006101561081a5760e00190565b80516007101561081a576101000190565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015610955575f90610918575b60ff9150166012811161090957601203601281116108f557604d81116108f557600a0a90565b634e487b7160e01b5f52601160045260245ffd5b636a78e98160e11b5f5260045ffd5b506020813d60201161094d575b81610932602093836107bf565b81010312610667575160ff811681036106675760ff906108cf565b3d9150610925565b6040513d5f823e3d90fdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146106645750806322acb86714610626578063313ce5671461060b57806347bcac3b1461057b57806354fd4d50146105415780637284e416146103ed5780637fe955d4146103595780639a6fc8f514610312578063af1296d3146102b5578063cd2c9e70146102605763feaf968c14610098575f80fd5b3461024a575f60031936011261024a576100bc60246100b5610b5f565b929061080c565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610256575f9261021e575b5081156101f857670de0b6b3a7640000948581029581870414901517156101cc57506101b08460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026113da565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d60201161024e575b8161023a602093836106e5565b8101031261024a5751905f610156565b5f80fd5b3d915061022d565b84513d5f823e3d90fd5b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000611241565b90519182916020835260208301906106b2565b0390f35b503461024a575f60031936011261024a576102ce610b5f565b91805191818301918352805180925260608301916020809201915f5b8281106102fe578580868960208301520390f35b8351855293810193928101926001016102ea565b50903461024a57602060031936011261024a573569ffffffffffffffffffff81160361024a57805f60a09251918183528160208401528201525f60608201525f6080820152f35b503461024a575f60031936011261024a576103937f000000000000000000000000000000000000000000000000000000000000000061104c565b908051918291602090602080850191818652845180935285019301915f5b8281106103c057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016103b1565b503461024a575f60031936011261024a5780515f5f549060018260011c9060018416938415610537575b602097888410861461050b57509187918694938286528386019690815f146104d1575060011461047b575b50505091610457601f92601f199403856106e5565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104bb575050508201018582601f19610442565b80548885018601528795509284019281016104a4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610442565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610417565b503461024a575f60031936011261024a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461024a5760208060031936011261024a5782359267ffffffffffffffff841161024a573660238501121561024a57830135926105b884610735565b936105c5845195866106e5565b8085526024602086019160051b8301019136831161024a57602401905b8282106105fc576020856105f58861080c565b9051908152f35b813581529083019083016105e2565b503461024a575f60031936011261024a576020905160128152f35b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000610da9565b3461024a575f60031936011261024a5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106106d1575050505090565b8351855293810193928101926001016106c3565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116107085760051b60200190565b80511561075a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561075a5760400190565b80516002101561075a5760600190565b80516003101561075a5760800190565b80516004101561075a5760a00190565b80516005101561075a5760c00190565b80516006101561075a5760e00190565b80516007101561075a576101000190565b805182101561075a5760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061083782610da9565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b3e575f91610aac575b5060209061091d92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906106b2565b5f602483015203915afa968715610aa357505f96610a6f575b5093929190670de0b6b3a7640000945f945b84861061096c57505050505050670de0b6b3a76400009161096891610f4a565b0490565b90919293949561097c87836107f8565b515f8112610a455761098e88856107f8565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610a1a5780156109ef576001926109dc670de0b6b3a7640000936109e2936109d48d8a6107f8565b519104610f8a565b90610f4a565b0496019493929190610948565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610a9b575b81610a8b602093836106e5565b8101031261024a5751945f610936565b3d9150610a7e565b513d5f823e3d90fd5b90503d805f833e610abd81836106e5565b810190602090818184031261024a5780519067ffffffffffffffff821161024a57019180601f8401121561024a578251610af681610735565b93610b038c5195866106e5565b818552838086019260051b82010192831161024a578301905b828210610b2f575050505061091d6108db565b81518152908301908301610b1c565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361024a57565b7f000000000000000000000000000000000000000000000000000000000000000090610b8a8261104c565b90610b9483611241565b91610b9e84610735565b604094610bae60405192836106e5565b808252610bba81610735565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610bfe5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610c248a846107f8565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610d6e575f925f94610d16575b5050610c7f610c798d886107f8565b516113da565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610cea5781840514901517156101cc57509060019291610ccb8c8b6107f8565b5280821015610ce357505b9801959493929190610bee565b9050610cd6565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610d67575b610d2f81836106e5565b8101031261024a57610d4081610b48565b9187820151918781015192610d5c608060608401519301610b48565b94509250925f610c6a565b503d610d25565b87513d5f823e3d90fd5b90610d8282610735565b610d8f60405191826106e5565b828152601f19610d9f8294610735565b0190602036910137565b610db281610d78565b907f0000000000000000000000000000000000000000000000000000000000000000610ddd8361074d565b527f0000000000000000000000000000000000000000000000000000000000000000610e0883610787565b526002811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e3c83610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e70836107a7565b526004811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ea4836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ed8836107c7565b526006811115610f46576007907f0000000000000000000000000000000000000000000000000000000000000000610f0f846107d7565b5211610f185790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b5290565b5090565b81810292918115918404141715610f5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a764000091808303610fa15750905090565b8290671bc16d674ec800008103610fbe5750508061096891610f4a565b673782dace9d9000008103610fe25750610fdb8261096893610f4a565b0480610f4a565b9050610fed91611480565b612710808202908282041482151715610f5d5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff938483010401901515029060018201808311610f5d57811015611047575050505f90565b030190565b61105581610735565b9061106360405192836106e5565b808252601f1961107282610735565b013660208401376110828261074d565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526110c783610787565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561123c576110fe83610797565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561123c57611135836107a7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561123c5761116c836107b7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561123c576111a3836107c7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561123c576007906111dd846107d7565b837f00000000000000000000000000000000000000000000000000000000000000001690521161120b575090565b611214826107e7565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61124a81610d78565b907f00000000000000000000000000000000000000000000000000000000000000006112758361074d565b527f00000000000000000000000000000000000000000000000000000000000000006112a083610787565b526002811115610f46577f00000000000000000000000000000000000000000000000000000000000000006112d483610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611308836107a7565b526004811115610f46577f000000000000000000000000000000000000000000000000000000000000000061133c836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611370836107c7565b526006811115610f46576007907f00000000000000000000000000000000000000000000000000000000000000006113a7846107d7565b52116113b05790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116114045790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611449576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611449570590565b908015611dac578115611da6578160ff1c611d7e57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611d565781670c7d713b49da00001280611d45575b156119e257670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611519908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611476565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806119cf575b156119a757819082121580611994575b1561196c575f915f811261195d575b506064906806f05b59d3b200000081126118fa577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156118c1575b6856bc75e2d631000000811215611887575b682b5e3af16b1880000081121561184f575b6815af1d78b58c400000811215611817575b680ad78ebc5ac62000008112156117e0575b828112156117a9575b6802b5e3af16b1880000811215611772575b68015af1d78b58c4000081121561173b575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611738576117389061142f565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906116b9565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906116a7565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611695565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061168c565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061167a565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611668565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611656565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611644565b6803782dace9d9000000811261194a577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261162f565b68056bc75e2d631000008260019261162f565b600192505f03905060646115d3565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115c4565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115b4565b81670de0b6b3a7640000925f91848112611d2f575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d04575b73011798004d755d3c8bc8e03204cf44619e000000821215611ce3575b820290808302906e01855144814a7ff805980ff00840009081831215611cc0575b50506b02df0ab5a80a22c61ab5a70080821215611ca0575b50693f1fce3da636ea5cf85080821215611c80575b50690127fa27722cc06cc5e280821215611c60575b5068280e60114edb805d0380821215611c40575b50680ebc5fb4174612111080821215611c29575b506808f00f760a4b2db55d80821215611c09575b506806f5f177578893793780821215611be9575b506806248f33704b28660380821215611bca575b506805c548670b9510e7ac80821215611bab575b50611b5868056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611476565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611ba6575f035b02611588565b611ba0565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b1c565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b08565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611af4565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611ae0565b68056bc75e2d63100000809202059101905f611acc565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611ab8565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611aa4565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611a8f565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611a7a565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611a62565b906b1425982cf597cd205cef73806803782dace9d900000091059101611a41565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a24565b9050611d3b915061142f565b60019060646119f7565b50670f43fc2c04ee000082126114c6565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220659c979dfe41d02b29882b7d46ec0a2e92eadb9c4641e40f6c89f036fb5a967b64736f6c634300081b0033","opcodes":"PUSH2 0x400 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x667 JUMPI PUSH2 0x2751 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x80 DUP3 DUP3 SUB SLT PUSH2 0x667 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP3 AND SWAP2 DUP3 DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0x20 SWAP6 DUP7 DUP4 ADD MLOAD SWAP7 DUP7 DUP9 AND SWAP8 DUP9 DUP2 SUB PUSH2 0x667 JUMPI DUP5 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x667 JUMPI DUP7 ADD SWAP5 PUSH1 0x1F SWAP7 DUP10 DUP9 DUP9 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP7 MLOAD SWAP10 PUSH2 0x87 DUP12 PUSH2 0x7F6 JUMP JUMPDEST SWAP8 PUSH2 0x94 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x7BF JUMP JUMPDEST DUP12 DUP10 MSTORE DUP7 DUP10 ADD SWAP1 DUP8 PUSH1 0x5 SWAP14 DUP15 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP8 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7A7 JUMPI POP POP POP PUSH1 0x60 ADD MLOAD PUSH1 0xC0 MSTORE PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP3 MLOAD SWAP9 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP11 MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x4 SWAP11 DUP6 DUP13 DUP4 ADD MSTORE GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP11 PUSH2 0x71A JUMPI JUMPDEST POP SWAP9 PUSH0 DUP8 SWAP9 SWAP10 SWAP11 DUP6 MLOAD SWAP9 DUP10 DUP1 SWAP3 PUSH4 0xF89F27ED PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP8 PUSH2 0x688 JUMPI JUMPDEST POP MLOAD SWAP5 DUP6 PUSH1 0xE0 MSTORE DUP8 PUSH0 DUP12 PUSH1 0xA0 MLOAD AND DUP7 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67E JUMPI SWAP1 DUP5 SWAP2 PUSH0 SWAP2 PUSH2 0x5EB JUMPI JUMPDEST POP PUSH1 0x24 PUSH2 0x179 SWAP2 DUP8 MLOAD SWAP4 DUP2 DUP6 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP10 DUP5 ADD MCOPY DUP2 ADD PUSH4 0xBD554D1 PUSH1 0xE2 SHL DUP9 DUP3 ADD MSTORE SUB DUP12 DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP1 MLOAD SWAP3 DUP4 GT PUSH2 0x5D8 JUMPI PUSH0 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP6 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x5CE JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x5BB JUMPI DUP4 DUP2 GT PUSH2 0x579 JUMPI JUMPDEST POP DUP1 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x517 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x50C JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP2 MLOAD DUP4 SUB PUSH2 0x4FE JUMPI DUP7 PUSH2 0x1E2 DUP4 PUSH2 0x80D JUMP JUMPDEST MLOAD AND SWAP2 PUSH2 0x200 SWAP3 DUP4 MSTORE PUSH2 0x1F4 DUP6 PUSH2 0x80D JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x100 SWAP9 DUP10 MSTORE PUSH2 0x210 DUP2 PUSH2 0x209 DUP5 PUSH2 0x80D JUMP JUMPDEST MLOAD AND PUSH2 0x89F JUMP JUMPDEST SWAP6 PUSH2 0x300 SWAP7 DUP8 MSTORE PUSH1 0x7 DUP3 PUSH2 0x223 DUP6 PUSH2 0x82E JUMP JUMPDEST MLOAD AND SWAP7 PUSH2 0x220 SWAP8 DUP9 MSTORE PUSH2 0x235 DUP4 PUSH2 0x82E JUMP JUMPDEST MLOAD SWAP11 PUSH2 0x120 SWAP12 DUP13 MSTORE PUSH2 0x24A DUP6 PUSH2 0x209 DUP9 PUSH2 0x82E JUMP JUMPDEST SWAP11 PUSH2 0x320 SWAP12 DUP13 MSTORE PUSH1 0x2 DUP4 GT PUSH2 0x4CA JUMPI JUMPDEST PUSH1 0x3 DUP4 GT PUSH2 0x496 JUMPI JUMPDEST DUP3 GT PUSH2 0x462 JUMPI JUMPDEST DUP2 GT PUSH2 0x42E JUMPI JUMPDEST PUSH1 0x6 DUP2 GT PUSH2 0x3FA JUMPI JUMPDEST GT PUSH2 0x3C4 JUMPI JUMPDEST POP POP POP MLOAD SWAP5 PUSH2 0x1DF0 SWAP7 DUP8 PUSH2 0x961 DUP9 CODECOPY PUSH1 0x80 MLOAD DUP8 DUP2 DUP2 PUSH2 0x126 ADD MSTORE PUSH2 0x8AB ADD MSTORE PUSH1 0xA0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x100 ADD MSTORE DUP2 DUP2 PUSH2 0x68E ADD MSTORE PUSH2 0x850 ADD MSTORE PUSH1 0xC0 MLOAD DUP8 PUSH2 0x558 ADD MSTORE PUSH1 0xE0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x27A ADD MSTORE DUP2 DUP2 PUSH2 0x36F ADD MSTORE DUP2 DUP2 PUSH2 0x640 ADD MSTORE DUP2 DUP2 PUSH2 0x80E ADD MSTORE PUSH2 0xB61 ADD MSTORE MLOAD DUP7 PUSH2 0xDB5 ADD MSTORE MLOAD DUP6 PUSH2 0xDE0 ADD MSTORE PUSH2 0x140 MLOAD DUP6 PUSH2 0xE14 ADD MSTORE PUSH2 0x160 MLOAD DUP6 PUSH2 0xE48 ADD MSTORE PUSH2 0x180 MLOAD DUP6 PUSH2 0xE7C ADD MSTORE PUSH2 0x1A0 MLOAD DUP6 PUSH2 0xEB0 ADD MSTORE PUSH2 0x1C0 MLOAD DUP6 PUSH2 0xEE7 ADD MSTORE PUSH2 0x1E0 MLOAD DUP6 PUSH2 0xF1A ADD MSTORE MLOAD DUP5 PUSH2 0x109C ADD MSTORE MLOAD DUP4 PUSH2 0x10C9 ADD MSTORE PUSH2 0x240 MLOAD DUP4 PUSH2 0x1100 ADD MSTORE PUSH2 0x260 MLOAD DUP4 PUSH2 0x1137 ADD MSTORE PUSH2 0x280 MLOAD DUP4 PUSH2 0x116E ADD MSTORE PUSH2 0x2A0 MLOAD DUP4 PUSH2 0x11A5 ADD MSTORE PUSH2 0x2C0 MLOAD DUP4 PUSH2 0x11E0 ADD MSTORE PUSH2 0x2E0 MLOAD DUP4 PUSH2 0x1217 ADD MSTORE MLOAD DUP3 PUSH2 0x124D ADD MSTORE MLOAD DUP2 PUSH2 0x1278 ADD MSTORE PUSH2 0x340 MLOAD DUP2 PUSH2 0x12AC ADD MSTORE PUSH2 0x360 MLOAD DUP2 PUSH2 0x12E0 ADD MSTORE PUSH2 0x380 MLOAD DUP2 PUSH2 0x1314 ADD MSTORE PUSH2 0x3A0 MLOAD DUP2 PUSH2 0x1348 ADD MSTORE PUSH2 0x3C0 MLOAD DUP2 PUSH2 0x137F ADD MSTORE PUSH2 0x3E0 MLOAD DUP2 PUSH2 0x13B2 ADD MSTORE RETURN JUMPDEST DUP3 PUSH2 0x3E4 PUSH2 0x209 SWAP3 DUP5 PUSH2 0x3D9 PUSH2 0x3EE SWAP8 PUSH2 0x88E JUMP JUMPDEST MLOAD AND PUSH2 0x2E0 MSTORE PUSH2 0x88E JUMP JUMPDEST MLOAD PUSH2 0x1E0 MSTORE PUSH2 0x88E JUMP JUMPDEST PUSH2 0x3E0 MSTORE PUSH0 DUP1 DUP1 PUSH2 0x280 JUMP JUMPDEST DUP4 PUSH2 0x404 DUP7 PUSH2 0x87E JUMP JUMPDEST MLOAD AND PUSH2 0x2C0 MSTORE PUSH2 0x413 DUP4 PUSH2 0x87E JUMP JUMPDEST MLOAD PUSH2 0x1C0 MSTORE PUSH2 0x425 DUP5 PUSH2 0x209 DUP8 PUSH2 0x87E JUMP JUMPDEST PUSH2 0x3C0 MSTORE PUSH2 0x27A JUMP JUMPDEST DUP4 PUSH2 0x438 DUP7 PUSH2 0x86E JUMP JUMPDEST MLOAD AND PUSH2 0x2A0 MSTORE PUSH2 0x447 DUP4 PUSH2 0x86E JUMP JUMPDEST MLOAD PUSH2 0x1A0 MSTORE PUSH2 0x459 DUP5 PUSH2 0x209 DUP8 PUSH2 0x86E JUMP JUMPDEST PUSH2 0x3A0 MSTORE PUSH2 0x271 JUMP JUMPDEST DUP5 PUSH2 0x46C DUP8 PUSH2 0x85E JUMP JUMPDEST MLOAD AND PUSH2 0x280 MSTORE PUSH2 0x47B DUP5 PUSH2 0x85E JUMP JUMPDEST MLOAD PUSH2 0x180 MSTORE PUSH2 0x48D DUP6 PUSH2 0x209 DUP9 PUSH2 0x85E JUMP JUMPDEST PUSH2 0x380 MSTORE PUSH2 0x26A JUMP JUMPDEST DUP6 PUSH2 0x4A0 DUP9 PUSH2 0x84E JUMP JUMPDEST MLOAD AND PUSH2 0x260 MSTORE PUSH2 0x4AF DUP6 PUSH2 0x84E JUMP JUMPDEST MLOAD PUSH2 0x160 MSTORE PUSH2 0x4C1 DUP7 PUSH2 0x209 DUP10 PUSH2 0x84E JUMP JUMPDEST PUSH2 0x360 MSTORE PUSH2 0x263 JUMP JUMPDEST DUP6 PUSH2 0x4D4 DUP9 PUSH2 0x83E JUMP JUMPDEST MLOAD AND PUSH2 0x240 MSTORE PUSH2 0x4E3 DUP6 PUSH2 0x83E JUMP JUMPDEST MLOAD PUSH2 0x140 MSTORE PUSH2 0x4F5 DUP7 PUSH2 0x209 DUP10 PUSH2 0x83E JUMP JUMPDEST PUSH2 0x340 MSTORE PUSH2 0x25A JUMP JUMPDEST DUP5 PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x1BF JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x55F JUMPI POP POP POP LT PUSH2 0x547 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x1D0 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x53A JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x529 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP14 DUP2 DUP9 ADD SWAP1 SHR DUP3 ADD SWAP3 DUP5 DUP9 LT PUSH2 0x5B2 JUMPI JUMPDEST ADD DUP14 SHR ADD SWAP1 DUP7 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x5A7 JUMPI POP POP PUSH2 0x1A5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP7 SWAP1 PUSH2 0x599 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x591 JUMP JUMPDEST PUSH1 0x22 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x195 JUMP JUMPDEST PUSH1 0x41 DUP10 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5FD DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP5 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x667 JUMPI ADD DUP2 DUP4 DUP3 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x66B JUMPI DUP7 MLOAD SWAP3 PUSH2 0x63D DUP4 DUP7 ADD PUSH1 0x1F NOT AND DUP9 ADD DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP3 DUP5 MSTORE DUP7 DUP4 DUP4 ADD ADD GT PUSH2 0x667 JUMPI DUP6 SWAP3 PUSH0 DUP5 DUP5 PUSH2 0x179 SWAP6 DUP3 PUSH1 0x24 SWAP7 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP2 POP PUSH2 0x148 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x69A DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP1 DUP1 DUP8 DUP4 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP2 MLOAD PUSH2 0x6C7 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP3 PUSH2 0x6D4 DUP8 MLOAD SWAP5 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 DUP14 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 DUP1 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x700 JUMPI POP POP POP POP SWAP6 PUSH0 PUSH2 0x117 JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP7 SWAP2 ADD PUSH2 0x6EE JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP RETURNDATASIZE DUP1 PUSH0 DUP13 RETURNDATACOPY PUSH2 0x72B DUP2 DUP13 PUSH2 0x7BF JUMP JUMPDEST DUP11 ADD SWAP10 DUP4 DUP2 DUP13 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP10 DUP1 DUP8 DUP13 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP11 MLOAD PUSH2 0x758 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP12 DUP6 DUP1 DUP9 MLOAD SWAP15 DUP16 SWAP1 PUSH2 0x76A SWAP1 DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 DUP13 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x78F JUMPI POP POP POP PUSH0 PUSH2 0xF0 JUMP JUMPDEST DUP2 MLOAD DUP13 DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST DUP2 MLOAD DUP1 DUP16 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x7E2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x7E2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x81A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x81A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 PUSH1 0x20 SWAP1 DUP3 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x955 JUMPI PUSH0 SWAP1 PUSH2 0x918 JUMPI JUMPDEST PUSH1 0xFF SWAP2 POP AND PUSH1 0x12 DUP2 GT PUSH2 0x909 JUMPI PUSH1 0x12 SUB PUSH1 0x12 DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0x4D DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x6A78E981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x94D JUMPI JUMPDEST DUP2 PUSH2 0x932 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x667 JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0xFF SWAP1 PUSH2 0x8CF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x925 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16F0115B EQ PUSH2 0x664 JUMPI POP DUP1 PUSH4 0x22ACB867 EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0x47BCAC3B EQ PUSH2 0x57B JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x541 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x7FE955D4 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0xAF1296D3 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xCD2C9E70 EQ PUSH2 0x260 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0xBC PUSH1 0x24 PUSH2 0xB5 PUSH2 0xB5F JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x80C JUMP JUMPDEST SWAP4 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP1 PUSH32 0x0 AND DUP7 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x256 JUMPI PUSH0 SWAP3 PUSH2 0x21E JUMPI JUMPDEST POP DUP2 ISZERO PUSH2 0x1F8 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP PUSH2 0x1B0 DUP5 PUSH1 0x1 PUSH0 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 SWAP9 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x13DA JUMP JUMPDEST SWAP3 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24E JUMPI JUMPDEST DUP2 PUSH2 0x23A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x156 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x22D JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0x1241 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2CE PUSH2 0xB5F JUMP JUMPDEST SWAP2 DUP1 MLOAD SWAP2 DUP2 DUP4 ADD SWAP2 DUP4 MSTORE DUP1 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD SWAP2 PUSH1 0x20 DUP1 SWAP3 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FE JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2EA JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0x24A JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x393 PUSH32 0x0 PUSH2 0x104C JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3C0 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3B1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x537 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x50B JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x4D1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x47B JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x457 PUSH1 0x1F SWAP3 PUSH1 0x1F NOT SWAP5 SUB DUP6 PUSH2 0x6E5 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x4BB JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x4A4 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x417 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP3 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x24A JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP4 ADD CALLDATALOAD SWAP3 PUSH2 0x5B8 DUP5 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0x5C5 DUP5 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x24A JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5FC JUMPI PUSH1 0x20 DUP6 PUSH2 0x5F5 DUP9 PUSH2 0x80C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5E2 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0xDA9 JUMP JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6D1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x6C3 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x708 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x75A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x837 DUP3 PUSH2 0xDA9 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x40 SWAP5 DUP6 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 SWAP3 DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP2 SWAP9 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB3E JUMPI PUSH0 SWAP2 PUSH2 0xAAC JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH2 0x91D SWAP3 DUP10 MLOAD DUP1 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP2 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xAA3 JUMPI POP PUSH0 SWAP7 PUSH2 0xA6F JUMPI JUMPDEST POP SWAP4 SWAP3 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH0 SWAP5 JUMPDEST DUP5 DUP7 LT PUSH2 0x96C JUMPI POP POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x97C DUP8 DUP4 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH0 DUP2 SLT PUSH2 0xA45 JUMPI PUSH2 0x98E DUP9 DUP6 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH8 0xDE0B6B3A7640000 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xA1A JUMPI DUP1 ISZERO PUSH2 0x9EF JUMPI PUSH1 0x1 SWAP3 PUSH2 0x9DC PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x9E2 SWAP4 PUSH2 0x9D4 DUP14 DUP11 PUSH2 0x7F8 JUMP JUMPDEST MLOAD SWAP2 DIV PUSH2 0xF8A JUMP JUMPDEST SWAP1 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP7 ADD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x948 JUMP JUMPDEST DUP7 PUSH1 0x12 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 SWAP1 DUP6 PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP6 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA9B JUMPI JUMPDEST DUP2 PUSH2 0xA8B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP5 PUSH0 PUSH2 0x936 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA7E JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xABD DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x24A JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x24A JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP3 MLOAD PUSH2 0xAF6 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0xB03 DUP13 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x24A JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xB2F JUMPI POP POP POP POP PUSH2 0x91D PUSH2 0x8DB JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB1C JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x24A JUMPI JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0xB8A DUP3 PUSH2 0x104C JUMP JUMPDEST SWAP1 PUSH2 0xB94 DUP4 PUSH2 0x1241 JUMP JUMPDEST SWAP2 PUSH2 0xB9E DUP5 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x40 SWAP5 PUSH2 0xBAE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0xBBA DUP2 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP6 JUMPDEST DUP5 DUP8 LT PUSH2 0xBFE JUMPI POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC24 DUP11 DUP5 PUSH2 0x7F8 JUMP JUMPDEST MLOAD AND DUP5 MLOAD DUP1 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0xA0 SWAP3 DUP4 SWAP2 PUSH1 0x4 SWAP4 DUP5 SWAP2 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xD6E JUMPI PUSH0 SWAP3 PUSH0 SWAP5 PUSH2 0xD16 JUMPI JUMPDEST POP POP PUSH2 0xC7F PUSH2 0xC79 DUP14 DUP9 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH2 0x13DA JUMP JUMPDEST SWAP2 DUP3 DUP2 MUL SWAP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH0 DUP4 SLT AND PUSH2 0xCEA JUMPI DUP2 DUP5 SDIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH2 0xCCB DUP13 DUP12 PUSH2 0x7F8 JUMP JUMPDEST MSTORE DUP1 DUP3 LT ISZERO PUSH2 0xCE3 JUMPI POP JUMPDEST SWAP9 ADD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x11 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 SWAP5 POP DUP2 SWAP4 POP RETURNDATASIZE DUP4 GT PUSH2 0xD67 JUMPI JUMPDEST PUSH2 0xD2F DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI PUSH2 0xD40 DUP2 PUSH2 0xB48 JUMP JUMPDEST SWAP2 DUP8 DUP3 ADD MLOAD SWAP2 DUP8 DUP2 ADD MLOAD SWAP3 PUSH2 0xD5C PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0xB48 JUMP JUMPDEST SWAP5 POP SWAP3 POP SWAP3 PUSH0 PUSH2 0xC6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD25 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0xD82 DUP3 PUSH2 0x735 JUMP JUMPDEST PUSH2 0xD8F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x6E5 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xD9F DUP3 SWAP5 PUSH2 0x735 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH2 0xDB2 DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xDDD DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0xE08 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE3C DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE70 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xEA4 DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xED8 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0xF0F DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0xF18 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0xFA1 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0xFBE JUMPI POP POP DUP1 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0xFE2 JUMPI POP PUSH2 0xFDB DUP3 PUSH2 0x968 SWAP4 PUSH2 0xF4A JUMP JUMPDEST DIV DUP1 PUSH2 0xF4A JUMP JUMPDEST SWAP1 POP PUSH2 0xFED SWAP2 PUSH2 0x1480 JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0xF5D JUMPI PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0xF5D JUMPI DUP2 LT ISZERO PUSH2 0x1047 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST PUSH2 0x1055 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP1 PUSH2 0x1063 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1F NOT PUSH2 0x1072 DUP3 PUSH2 0x735 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH2 0x1082 DUP3 PUSH2 0x74D JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP1 MSTORE PUSH2 0x10C7 DUP4 PUSH2 0x787 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x10FE DUP4 PUSH2 0x797 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x1135 DUP4 PUSH2 0x7A7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x116C DUP4 PUSH2 0x7B7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x11A3 DUP4 PUSH2 0x7C7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH1 0x7 SWAP1 PUSH2 0x11DD DUP5 PUSH2 0x7D7 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP1 MSTORE GT PUSH2 0x120B JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x1214 DUP3 PUSH2 0x7E7 JUMP JUMPDEST SWAP1 PUSH32 0x0 AND SWAP1 MSTORE SWAP1 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x124A DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1275 DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x12A0 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x12D4 DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1308 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x133C DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1370 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x13A7 DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0x13B0 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1404 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1449 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x1449 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1DAC JUMPI DUP2 ISZERO PUSH2 0x1DA6 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1D7E JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1D56 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1D45 JUMPI JUMPDEST ISZERO PUSH2 0x19E2 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1519 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x19CF JUMPI JUMPDEST ISZERO PUSH2 0x19A7 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x1994 JUMPI JUMPDEST ISZERO PUSH2 0x196C JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x195D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x18FA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x18C1 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x1887 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x184F JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1817 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x17E0 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x17A9 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x1772 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x173B JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x1738 JUMPI PUSH2 0x1738 SWAP1 PUSH2 0x142F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16B9 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16A7 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1695 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x168C JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x167A JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1668 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1656 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x1644 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x194A JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x15D3 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15C4 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15B4 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1D2F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1D04 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1CE3 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1CC0 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1CA0 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1C80 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1C60 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1C40 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1C29 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1C09 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1BE9 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1BCA JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1BAB JUMPI JUMPDEST POP PUSH2 0x1B58 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1BA6 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x1588 JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B1C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AF4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AE0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1ACC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AB8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AA4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A7A JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1A62 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1A41 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1A24 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D3B SWAP2 POP PUSH2 0x142F JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x19F7 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x14C6 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x9C979DFE41D0 0x2B 0x29 DUP9 0x2B PUSH30 0x46EC0A2E92EADB9C4641E40F6C89F036FB5A967B64736F6C634300081B00 CALLER ","sourceMap":"1021:13853:72:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2864:19;;1021:13853;2893:15;2918:12;;1021:13853;;;;;;2966:36;;-1:-1:-1;2966:36:72;1021:13853;2966:36;;;;;;;1021:13853;2966:36;;;;;;;-1:-1:-1;2966:36:72;;;1021:13853;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;3039:28;;;;;;;;;-1:-1:-1;3039:28:72;;;1021:13853;;;3120:26;;1021:13853;3120:26;1021:13853;-1:-1:-1;1021:13853:72;2918:12;1021:13853;;;;;;;;;;;3185:38;;;;;;;;;;;;-1:-1:-1;3185:38:72;;;1021:13853;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1021:13853:72;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;1500:6:35;;1496:65;;3371:8:72;;;;:::i;:::-;1021:13853;;3357:22;;;;;3404:10;;;:::i;:::-;1021:13853;3393:21;;;;;3462:47;3500:8;;;;:::i;:::-;1021:13853;;3462:47;:::i;:::-;3428:81;;;;;4854:1;3538:8;;;;:::i;:::-;1021:13853;;3524:22;;;;;3571:10;;;:::i;:::-;1021:13853;3560:21;;;;;3629:47;3667:8;;;;:::i;3629:47::-;3595:81;;;;;3717:1;3703:15;;3699:215;;1021:13853;3945:1;3931:15;;3927:215;;1021:13853;4159:15;;4155:214;;1021:13853;4386:15;;4382:214;;1021:13853;4627:1;4613:15;;4609:214;;1021:13853;4840:15;4836:214;;1021:13853;;;;;;;;;;;;;;;;;;;;;;;2918:12;1021:13853;;;;;;;;;;;;;;;2864:19;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4836:214;4889:8;4926:10;5026:8;4889;;;4988:47;4889:8;;:::i;:::-;1021:13853;;4875:22;;4926:10;:::i;:::-;1021:13853;4915:21;;5026:8;:::i;4988:47::-;4954:81;;4836:214;;;;;4609;4662:8;;;;:::i;:::-;1021:13853;;4648:22;;4699:10;;;:::i;:::-;1021:13853;4688:21;;4761:47;4799:8;;;;:::i;4761:47::-;4727:81;;4609:214;;4382;4435:8;;;;:::i;:::-;1021:13853;;4421:22;;4472:10;;;:::i;:::-;1021:13853;4461:21;;4534:47;4572:8;;;;:::i;4534:47::-;4500:81;;4382:214;;4155;4208:8;;;;:::i;:::-;1021:13853;;4194:22;;4245:10;;;:::i;:::-;1021:13853;4234:21;;4307:47;4345:8;;;;:::i;4307:47::-;4273:81;;4155:214;;3927:215;3981:8;;;;:::i;:::-;1021:13853;;3967:22;;4018:10;;;:::i;:::-;1021:13853;4007:21;;4080:47;4118:8;;;;:::i;4080:47::-;4046:81;;3927:215;;3699;3753:8;;;;:::i;:::-;1021:13853;;3739:22;;3790:10;;;:::i;:::-;1021:13853;3779:21;;3852:47;3890:8;;;;:::i;3852:47::-;3818:81;;3699:215;;1496:65:35;1529:21;;;;-1:-1:-1;1529:21:35;-1:-1:-1;1529:21:35;1021:13853:72;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;-1:-1:-1;1021:13853:72;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;-1:-1:-1;1021:13853:72;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;-1:-1:-1;1021:13853:72;3185:38;;;;;;-1:-1:-1;3185:38:72;;;;;;:::i;:::-;;;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;3185:38;;;;1021:13853;-1:-1:-1;1021:13853:72;;;;;;;;-1:-1:-1;1021:13853:72;;;-1:-1:-1;1021:13853:72;3185:38;1021:13853;;;-1:-1:-1;1021:13853:72;;;;;3039:28;;;;;;-1:-1:-1;3039:28:72;;;;;;:::i;:::-;;;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:28;;;;;;;;1021:13853;;;;;;;;;;;;;;3039:28;1021:13853;;;-1:-1:-1;1021:13853:72;;;;;2966:36;;;;;-1:-1:-1;2966:36:72;;;;;;:::i;:::-;;;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2966:36;;;-1:-1:-1;2966:36:72;;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;-1:-1:-1;;;;;1021:13853:72;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;1021:13853:72;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;2966:36;1021:13853;;;;;2966:36;1021:13853;;;;;;;;;;;;:::o;:::-;;;3717:1;1021:13853;;;;;;;:::o;:::-;;;3945:1;1021:13853;;;;;;;:::o;:::-;;;2966:36;1021:13853;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;4627:1;1021:13853;;;;;;;:::o;:::-;;;4854:1;1021:13853;;;;;;;:::o;11521:313::-;1021:13853;;-1:-1:-1;;;11661:15:72;;1021:13853;11661:15;;1021:13853;;11661:15;;1021:13853;;-1:-1:-1;;;;;1021:13853:72;11661:15;;;;;;;;;;11521:313;1021:13853;;;;1234:2;11691:28;;11687:87;;1234:2;;;;;;;;;;;;;;11521:313;:::o;1234:2::-;1021:13853;;;11661:15;1234:2;;11661:15;1234:2;;11661:15;1234:2;11687:87;11742:21;;;11661:15;11742:21;11661:15;;11742:21;11661:15;;;;;;;;;;;;;;;;:::i;:::-;;;1021:13853;;;;;;;;;;;;;11661:15;;;;;;-1:-1:-1;11661:15:72;;;1021:13853;;;11661:15;1021:13853;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_uint80_fromMemory":{"entryPoint":2888,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":1714,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":3448,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_int256_dyn":{"entryPoint":1845,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256":{"entryPoint":3914,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1765,"id":null,"parameterSlots":2,"returnSlots":0},"fun_calculateTVL":{"entryPoint":2060,"id":17151,"parameterSlots":1,"returnSlots":1},"fun_getFeedData":{"entryPoint":2911,"id":17242,"parameterSlots":0,"returnSlots":2},"fun_getFeedTokenDecimalScalingFactors":{"entryPoint":4673,"id":17543,"parameterSlots":1,"returnSlots":1},"fun_getFeeds":{"entryPoint":4172,"id":17427,"parameterSlots":1,"returnSlots":1},"fun_getWeights":{"entryPoint":3497,"id":17659,"parameterSlots":1,"returnSlots":1},"fun_pow":{"entryPoint":5248,"id":5180,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":3978,"id":4843,"parameterSlots":2,"returnSlots":1},"fun_toInt256":{"entryPoint":5082,"id":12025,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn":{"entryPoint":2040,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_int256_dyn_11296":{"entryPoint":1869,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11297":{"entryPoint":1927,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11298":{"entryPoint":1943,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11299":{"entryPoint":1959,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11300":{"entryPoint":1975,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11301":{"entryPoint":1991,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11302":{"entryPoint":2007,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_11303":{"entryPoint":2023,"id":null,"parameterSlots":1,"returnSlots":1},"wrapping_div_int256":{"entryPoint":5238,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_11321":{"entryPoint":5167,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"16611":[{"length":32,"start":294},{"length":32,"start":2219}],"16614":[{"length":32,"start":256},{"length":32,"start":1678},{"length":32,"start":2128}],"16616":[{"length":32,"start":1368}],"16618":[{"length":32,"start":634},{"length":32,"start":879},{"length":32,"start":1600},{"length":32,"start":2062},{"length":32,"start":2913}],"16622":[{"length":32,"start":3509}],"16624":[{"length":32,"start":3552}],"16626":[{"length":32,"start":3604}],"16628":[{"length":32,"start":3656}],"16630":[{"length":32,"start":3708}],"16632":[{"length":32,"start":3760}],"16634":[{"length":32,"start":3815}],"16636":[{"length":32,"start":3866}],"16639":[{"length":32,"start":4252}],"16642":[{"length":32,"start":4297}],"16645":[{"length":32,"start":4352}],"16648":[{"length":32,"start":4407}],"16651":[{"length":32,"start":4462}],"16654":[{"length":32,"start":4517}],"16657":[{"length":32,"start":4576}],"16660":[{"length":32,"start":4631}],"16662":[{"length":32,"start":4685}],"16664":[{"length":32,"start":4728}],"16666":[{"length":32,"start":4780}],"16668":[{"length":32,"start":4832}],"16670":[{"length":32,"start":4884}],"16672":[{"length":32,"start":4936}],"16674":[{"length":32,"start":4991}],"16676":[{"length":32,"start":5042}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146106645750806322acb86714610626578063313ce5671461060b57806347bcac3b1461057b57806354fd4d50146105415780637284e416146103ed5780637fe955d4146103595780639a6fc8f514610312578063af1296d3146102b5578063cd2c9e70146102605763feaf968c14610098575f80fd5b3461024a575f60031936011261024a576100bc60246100b5610b5f565b929061080c565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610256575f9261021e575b5081156101f857670de0b6b3a7640000948581029581870414901517156101cc57506101b08460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026113da565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d60201161024e575b8161023a602093836106e5565b8101031261024a5751905f610156565b5f80fd5b3d915061022d565b84513d5f823e3d90fd5b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000611241565b90519182916020835260208301906106b2565b0390f35b503461024a575f60031936011261024a576102ce610b5f565b91805191818301918352805180925260608301916020809201915f5b8281106102fe578580868960208301520390f35b8351855293810193928101926001016102ea565b50903461024a57602060031936011261024a573569ffffffffffffffffffff81160361024a57805f60a09251918183528160208401528201525f60608201525f6080820152f35b503461024a575f60031936011261024a576103937f000000000000000000000000000000000000000000000000000000000000000061104c565b908051918291602090602080850191818652845180935285019301915f5b8281106103c057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016103b1565b503461024a575f60031936011261024a5780515f5f549060018260011c9060018416938415610537575b602097888410861461050b57509187918694938286528386019690815f146104d1575060011461047b575b50505091610457601f92601f199403856106e5565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104bb575050508201018582601f19610442565b80548885018601528795509284019281016104a4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610442565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610417565b503461024a575f60031936011261024a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461024a5760208060031936011261024a5782359267ffffffffffffffff841161024a573660238501121561024a57830135926105b884610735565b936105c5845195866106e5565b8085526024602086019160051b8301019136831161024a57602401905b8282106105fc576020856105f58861080c565b9051908152f35b813581529083019083016105e2565b503461024a575f60031936011261024a576020905160128152f35b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000610da9565b3461024a575f60031936011261024a5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106106d1575050505090565b8351855293810193928101926001016106c3565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116107085760051b60200190565b80511561075a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561075a5760400190565b80516002101561075a5760600190565b80516003101561075a5760800190565b80516004101561075a5760a00190565b80516005101561075a5760c00190565b80516006101561075a5760e00190565b80516007101561075a576101000190565b805182101561075a5760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061083782610da9565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b3e575f91610aac575b5060209061091d92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906106b2565b5f602483015203915afa968715610aa357505f96610a6f575b5093929190670de0b6b3a7640000945f945b84861061096c57505050505050670de0b6b3a76400009161096891610f4a565b0490565b90919293949561097c87836107f8565b515f8112610a455761098e88856107f8565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610a1a5780156109ef576001926109dc670de0b6b3a7640000936109e2936109d48d8a6107f8565b519104610f8a565b90610f4a565b0496019493929190610948565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610a9b575b81610a8b602093836106e5565b8101031261024a5751945f610936565b3d9150610a7e565b513d5f823e3d90fd5b90503d805f833e610abd81836106e5565b810190602090818184031261024a5780519067ffffffffffffffff821161024a57019180601f8401121561024a578251610af681610735565b93610b038c5195866106e5565b818552838086019260051b82010192831161024a578301905b828210610b2f575050505061091d6108db565b81518152908301908301610b1c565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361024a57565b7f000000000000000000000000000000000000000000000000000000000000000090610b8a8261104c565b90610b9483611241565b91610b9e84610735565b604094610bae60405192836106e5565b808252610bba81610735565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610bfe5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610c248a846107f8565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610d6e575f925f94610d16575b5050610c7f610c798d886107f8565b516113da565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610cea5781840514901517156101cc57509060019291610ccb8c8b6107f8565b5280821015610ce357505b9801959493929190610bee565b9050610cd6565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610d67575b610d2f81836106e5565b8101031261024a57610d4081610b48565b9187820151918781015192610d5c608060608401519301610b48565b94509250925f610c6a565b503d610d25565b87513d5f823e3d90fd5b90610d8282610735565b610d8f60405191826106e5565b828152601f19610d9f8294610735565b0190602036910137565b610db281610d78565b907f0000000000000000000000000000000000000000000000000000000000000000610ddd8361074d565b527f0000000000000000000000000000000000000000000000000000000000000000610e0883610787565b526002811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e3c83610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e70836107a7565b526004811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ea4836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ed8836107c7565b526006811115610f46576007907f0000000000000000000000000000000000000000000000000000000000000000610f0f846107d7565b5211610f185790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b5290565b5090565b81810292918115918404141715610f5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a764000091808303610fa15750905090565b8290671bc16d674ec800008103610fbe5750508061096891610f4a565b673782dace9d9000008103610fe25750610fdb8261096893610f4a565b0480610f4a565b9050610fed91611480565b612710808202908282041482151715610f5d5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff938483010401901515029060018201808311610f5d57811015611047575050505f90565b030190565b61105581610735565b9061106360405192836106e5565b808252601f1961107282610735565b013660208401376110828261074d565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526110c783610787565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561123c576110fe83610797565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561123c57611135836107a7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561123c5761116c836107b7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561123c576111a3836107c7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561123c576007906111dd846107d7565b837f00000000000000000000000000000000000000000000000000000000000000001690521161120b575090565b611214826107e7565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61124a81610d78565b907f00000000000000000000000000000000000000000000000000000000000000006112758361074d565b527f00000000000000000000000000000000000000000000000000000000000000006112a083610787565b526002811115610f46577f00000000000000000000000000000000000000000000000000000000000000006112d483610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611308836107a7565b526004811115610f46577f000000000000000000000000000000000000000000000000000000000000000061133c836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611370836107c7565b526006811115610f46576007907f00000000000000000000000000000000000000000000000000000000000000006113a7846107d7565b52116113b05790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116114045790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611449576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611449570590565b908015611dac578115611da6578160ff1c611d7e57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611d565781670c7d713b49da00001280611d45575b156119e257670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611519908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611476565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806119cf575b156119a757819082121580611994575b1561196c575f915f811261195d575b506064906806f05b59d3b200000081126118fa577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156118c1575b6856bc75e2d631000000811215611887575b682b5e3af16b1880000081121561184f575b6815af1d78b58c400000811215611817575b680ad78ebc5ac62000008112156117e0575b828112156117a9575b6802b5e3af16b1880000811215611772575b68015af1d78b58c4000081121561173b575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611738576117389061142f565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906116b9565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906116a7565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611695565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061168c565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061167a565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611668565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611656565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611644565b6803782dace9d9000000811261194a577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261162f565b68056bc75e2d631000008260019261162f565b600192505f03905060646115d3565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115c4565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115b4565b81670de0b6b3a7640000925f91848112611d2f575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d04575b73011798004d755d3c8bc8e03204cf44619e000000821215611ce3575b820290808302906e01855144814a7ff805980ff00840009081831215611cc0575b50506b02df0ab5a80a22c61ab5a70080821215611ca0575b50693f1fce3da636ea5cf85080821215611c80575b50690127fa27722cc06cc5e280821215611c60575b5068280e60114edb805d0380821215611c40575b50680ebc5fb4174612111080821215611c29575b506808f00f760a4b2db55d80821215611c09575b506806f5f177578893793780821215611be9575b506806248f33704b28660380821215611bca575b506805c548670b9510e7ac80821215611bab575b50611b5868056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611476565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611ba6575f035b02611588565b611ba0565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b1c565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b08565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611af4565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611ae0565b68056bc75e2d63100000809202059101905f611acc565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611ab8565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611aa4565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611a8f565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611a7a565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611a62565b906b1425982cf597cd205cef73806803782dace9d900000091059101611a41565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a24565b9050611d3b915061142f565b60019060646119f7565b50670f43fc2c04ee000082126114c6565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220659c979dfe41d02b29882b7d46ec0a2e92eadb9c4641e40f6c89f036fb5a967b64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16F0115B EQ PUSH2 0x664 JUMPI POP DUP1 PUSH4 0x22ACB867 EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0x47BCAC3B EQ PUSH2 0x57B JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x541 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x7FE955D4 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0xAF1296D3 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xCD2C9E70 EQ PUSH2 0x260 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0xBC PUSH1 0x24 PUSH2 0xB5 PUSH2 0xB5F JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x80C JUMP JUMPDEST SWAP4 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP1 PUSH32 0x0 AND DUP7 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x256 JUMPI PUSH0 SWAP3 PUSH2 0x21E JUMPI JUMPDEST POP DUP2 ISZERO PUSH2 0x1F8 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP PUSH2 0x1B0 DUP5 PUSH1 0x1 PUSH0 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 SWAP9 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x13DA JUMP JUMPDEST SWAP3 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24E JUMPI JUMPDEST DUP2 PUSH2 0x23A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x156 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x22D JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0x1241 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2CE PUSH2 0xB5F JUMP JUMPDEST SWAP2 DUP1 MLOAD SWAP2 DUP2 DUP4 ADD SWAP2 DUP4 MSTORE DUP1 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD SWAP2 PUSH1 0x20 DUP1 SWAP3 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FE JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2EA JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0x24A JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x393 PUSH32 0x0 PUSH2 0x104C JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3C0 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3B1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x537 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x50B JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x4D1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x47B JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x457 PUSH1 0x1F SWAP3 PUSH1 0x1F NOT SWAP5 SUB DUP6 PUSH2 0x6E5 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x4BB JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x4A4 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x417 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP3 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x24A JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP4 ADD CALLDATALOAD SWAP3 PUSH2 0x5B8 DUP5 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0x5C5 DUP5 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x24A JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5FC JUMPI PUSH1 0x20 DUP6 PUSH2 0x5F5 DUP9 PUSH2 0x80C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5E2 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0xDA9 JUMP JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6D1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x6C3 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x708 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x75A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x837 DUP3 PUSH2 0xDA9 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x40 SWAP5 DUP6 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 SWAP3 DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP2 SWAP9 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB3E JUMPI PUSH0 SWAP2 PUSH2 0xAAC JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH2 0x91D SWAP3 DUP10 MLOAD DUP1 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP2 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xAA3 JUMPI POP PUSH0 SWAP7 PUSH2 0xA6F JUMPI JUMPDEST POP SWAP4 SWAP3 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH0 SWAP5 JUMPDEST DUP5 DUP7 LT PUSH2 0x96C JUMPI POP POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x97C DUP8 DUP4 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH0 DUP2 SLT PUSH2 0xA45 JUMPI PUSH2 0x98E DUP9 DUP6 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH8 0xDE0B6B3A7640000 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xA1A JUMPI DUP1 ISZERO PUSH2 0x9EF JUMPI PUSH1 0x1 SWAP3 PUSH2 0x9DC PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x9E2 SWAP4 PUSH2 0x9D4 DUP14 DUP11 PUSH2 0x7F8 JUMP JUMPDEST MLOAD SWAP2 DIV PUSH2 0xF8A JUMP JUMPDEST SWAP1 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP7 ADD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x948 JUMP JUMPDEST DUP7 PUSH1 0x12 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 SWAP1 DUP6 PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP6 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA9B JUMPI JUMPDEST DUP2 PUSH2 0xA8B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP5 PUSH0 PUSH2 0x936 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA7E JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xABD DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x24A JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x24A JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP3 MLOAD PUSH2 0xAF6 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0xB03 DUP13 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x24A JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xB2F JUMPI POP POP POP POP PUSH2 0x91D PUSH2 0x8DB JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB1C JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x24A JUMPI JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0xB8A DUP3 PUSH2 0x104C JUMP JUMPDEST SWAP1 PUSH2 0xB94 DUP4 PUSH2 0x1241 JUMP JUMPDEST SWAP2 PUSH2 0xB9E DUP5 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x40 SWAP5 PUSH2 0xBAE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0xBBA DUP2 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP6 JUMPDEST DUP5 DUP8 LT PUSH2 0xBFE JUMPI POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC24 DUP11 DUP5 PUSH2 0x7F8 JUMP JUMPDEST MLOAD AND DUP5 MLOAD DUP1 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0xA0 SWAP3 DUP4 SWAP2 PUSH1 0x4 SWAP4 DUP5 SWAP2 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xD6E JUMPI PUSH0 SWAP3 PUSH0 SWAP5 PUSH2 0xD16 JUMPI JUMPDEST POP POP PUSH2 0xC7F PUSH2 0xC79 DUP14 DUP9 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH2 0x13DA JUMP JUMPDEST SWAP2 DUP3 DUP2 MUL SWAP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH0 DUP4 SLT AND PUSH2 0xCEA JUMPI DUP2 DUP5 SDIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH2 0xCCB DUP13 DUP12 PUSH2 0x7F8 JUMP JUMPDEST MSTORE DUP1 DUP3 LT ISZERO PUSH2 0xCE3 JUMPI POP JUMPDEST SWAP9 ADD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x11 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 SWAP5 POP DUP2 SWAP4 POP RETURNDATASIZE DUP4 GT PUSH2 0xD67 JUMPI JUMPDEST PUSH2 0xD2F DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI PUSH2 0xD40 DUP2 PUSH2 0xB48 JUMP JUMPDEST SWAP2 DUP8 DUP3 ADD MLOAD SWAP2 DUP8 DUP2 ADD MLOAD SWAP3 PUSH2 0xD5C PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0xB48 JUMP JUMPDEST SWAP5 POP SWAP3 POP SWAP3 PUSH0 PUSH2 0xC6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD25 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0xD82 DUP3 PUSH2 0x735 JUMP JUMPDEST PUSH2 0xD8F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x6E5 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xD9F DUP3 SWAP5 PUSH2 0x735 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH2 0xDB2 DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xDDD DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0xE08 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE3C DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE70 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xEA4 DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xED8 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0xF0F DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0xF18 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0xFA1 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0xFBE JUMPI POP POP DUP1 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0xFE2 JUMPI POP PUSH2 0xFDB DUP3 PUSH2 0x968 SWAP4 PUSH2 0xF4A JUMP JUMPDEST DIV DUP1 PUSH2 0xF4A JUMP JUMPDEST SWAP1 POP PUSH2 0xFED SWAP2 PUSH2 0x1480 JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0xF5D JUMPI PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0xF5D JUMPI DUP2 LT ISZERO PUSH2 0x1047 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST PUSH2 0x1055 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP1 PUSH2 0x1063 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1F NOT PUSH2 0x1072 DUP3 PUSH2 0x735 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH2 0x1082 DUP3 PUSH2 0x74D JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP1 MSTORE PUSH2 0x10C7 DUP4 PUSH2 0x787 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x10FE DUP4 PUSH2 0x797 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x1135 DUP4 PUSH2 0x7A7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x116C DUP4 PUSH2 0x7B7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x11A3 DUP4 PUSH2 0x7C7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH1 0x7 SWAP1 PUSH2 0x11DD DUP5 PUSH2 0x7D7 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP1 MSTORE GT PUSH2 0x120B JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x1214 DUP3 PUSH2 0x7E7 JUMP JUMPDEST SWAP1 PUSH32 0x0 AND SWAP1 MSTORE SWAP1 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x124A DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1275 DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x12A0 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x12D4 DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1308 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x133C DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1370 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x13A7 DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0x13B0 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1404 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1449 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x1449 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1DAC JUMPI DUP2 ISZERO PUSH2 0x1DA6 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1D7E JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1D56 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1D45 JUMPI JUMPDEST ISZERO PUSH2 0x19E2 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1519 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x19CF JUMPI JUMPDEST ISZERO PUSH2 0x19A7 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x1994 JUMPI JUMPDEST ISZERO PUSH2 0x196C JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x195D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x18FA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x18C1 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x1887 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x184F JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1817 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x17E0 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x17A9 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x1772 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x173B JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x1738 JUMPI PUSH2 0x1738 SWAP1 PUSH2 0x142F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16B9 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16A7 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1695 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x168C JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x167A JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1668 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1656 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x1644 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x194A JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x15D3 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15C4 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15B4 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1D2F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1D04 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1CE3 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1CC0 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1CA0 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1C80 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1C60 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1C40 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1C29 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1C09 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1BE9 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1BCA JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1BAB JUMPI JUMPDEST POP PUSH2 0x1B58 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1BA6 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x1588 JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B1C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AF4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AE0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1ACC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AB8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AA4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A7A JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1A62 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1A41 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1A24 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D3B SWAP2 POP PUSH2 0x142F JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x19F7 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x14C6 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x9C979DFE41D0 0x2B 0x29 DUP9 0x2B PUSH30 0x46EC0A2E92EADB9C4641E40F6C89F036FB5A967B64736F6C634300081B00 CALLER ","sourceMap":"1021:13853:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;7409:20;1021:13853;7371:13;;:::i;:::-;7409:20;;;:::i;:::-;1021:13853;7461:33;1021:13853;;;7461:33;;;;1021:13853;7461:33;;7488:4;;1021:13853;7461:33;;;1021:13853;7461:6;1021:13853;7461:33;;;;;;;1021:13853;7461:33;;;1021:13853;2004:6:38;;;2000:58;;465:4;1021:13853:72;;;;;;;;;;;;;;;2560:120:38;7567:18:72;2560:120:38;;1021:13853:72;2560:120:38;;1021:13853:72;2560:120:38;;;;;;;;7567:18:72;:::i;:::-;1021:13853;;;;;;;7461:33;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;2000:58:38;2033:14;1021:13853:72;2033:14:38;1021:13853:72;2033:14:38;7461:33:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;1021:13853;;;;;7461:33;;;;1021:13853;;;;7461:33;;;-1:-1:-1;7461:33:72;;;1021:13853;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;11339:12;11304:48;11339:12;11304:48;:::i;:::-;1021:13853;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;11127:23;11137:12;11127:23;:::i;:::-;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;-1:-1:-1;;;1021:13853:72;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;-1:-1:-1;1021:13853:72;;-1:-1:-1;;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;5301:8;1021:13853;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;1234:2;1021:13853;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;11495:12;11483:25;11495:12;11483:25;:::i;1021:13853::-;;;;;-1:-1:-1;;1021:13853:72;;;;;;1281:35;1021:13853;1281:35;1021:13853;;;;;;;;;;;;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1021:13853:72;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;465:4:38:-;1021:13853:72;;465:4:38;;;;;;:::o;:::-;;14297:1:72;465:4:38;;;;;14297:1:72;465:4:38;;1021:13853:72;;14332:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;14377:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;14462:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;14547:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;14632:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;14717:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;14802:1;465:4:38;;;;;;;:::o;:::-;1021:13853:72;;465:4:38;;;;;;;;;;;;:::o;7655:2593:72:-;7767:12;7817:24;;;;:::i;:::-;1021:13853;;7933:4;;1021:13853;;;;;7895:44;1021:13853;7895:44;;;;;;;;1021:13853;7895:44;1021:13853;;;;7895:6;;1021:13853;7895:44;;;;;;;;;;;7655:2593;1021:13853;;;;;;;9957:66;;;;;1021:13853;9957:66;;;7895:44;9957:66;;1021:13853;;;;;;:::i;:::-;7895:44;1021:13853;;;;9957:66;;;;;;;;;;7895:44;9957:66;;;7655:2593;10034:20;;;;;465:4:38;10069:13:72;7895:44;10064:147;10084:15;;;;;;838:5:38;;;;;;465:4;838:5;;;;:::i;:::-;1021:13853:72;7655:2593;:::o;10101:3::-;10138:9;;;;;;;;;;:::i;:::-;465:4:38;7895:44:72;17245:9:59;;17241:81;;10168:10:72;;;;:::i;:::-;465:4:38;;1021:13853:72;;;;;;465:4:38;1021:13853:72;;;;;;;;;;;;10188:10;10138:61;465:4:38;10188:10:72;838:5:38;10188:10:72;;;;;:::i;:::-;465:4:38;1021:13853:72;;10138:61;:::i;:::-;838:5:38;;:::i;:::-;1021:13853:72;10101:3;465:4:38;10069:13:72;;;;;;;1021:13853;;;;;7895:44;1021:13853;;7895:44;1021:13853;;;;;;7895:44;1021:13853;;7895:44;1021:13853;17241:81:59;17277:34;;;;7895:44:72;17277:34:59;1021:13853:72;7895:44;17277:34:59;9957:66:72;;;;1021:13853;9957:66;;1021:13853;9957:66;;;;;;1021:13853;9957:66;;;:::i;:::-;;;1021:13853;;;;;9957:66;;;;;;;-1:-1:-1;9957:66:72;;;1021:13853;;7895:44;1021:13853;;;;;7895:44;;;;;;;;;;;;:::i;:::-;;;1021:13853;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;7895:44;;;;1021:13853;7895:44;;1021:13853;;;;;;;;;;;;;7895:44;1021:13853;;;7895:44;1021:13853;;;;;;;;;;;;;;;:::o;10292:699::-;10411:12;10472:22;;;;:::i;:::-;10549:47;;;;:::i;:::-;1021:13853;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;1021:13853:72;;;;;;;;10607:34;10652:29;10664:17;10696:13;-1:-1:-1;10691:294:72;10711:15;;;;;;10292:699;;;;;;;:::o;10728:3::-;10794:8;;;;;;;1021:13853;10794:8;;;;:::i;:::-;1021:13853;;;;10794:26;;;1021:13853;10794:26;;;;;;;;;;;;;;;;;-1:-1:-1;;;;10794:26:72;;10728:3;10855:28;;:39;:28;;;;:::i;:::-;465:4:38;10855:39:72;:::i;:::-;1021:13853;;;;;;;;-1:-1:-1;1021:13853:72;;;;;;;;;;;;;;;10834:60;;465:4:38;10834:60:72;;;;;;:::i;:::-;1021:13853;10921:25;;;;;;:53;;10728:3;465:4:38;10696:13:72;;;;;;;;10921:53;;;;;1021:13853;;;;-1:-1:-1;1021:13853:72;;;-1:-1:-1;1021:13853:72;10794:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;1021:13853;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10794:26;;;;;;;;;;;;;;1021:13853;;;-1:-1:-1;1021:13853:72;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;1021:13853:72;;;;:::i;:::-;;;;;;;;:::o;14091:781::-;14211:26;;;:::i;:::-;14302:8;;14289:21;;;:::i;:::-;1021:13853;14337:8;14324:21;;;:::i;:::-;1021:13853;14377:1;14363:15;;14377:1;;;14395:8;14382:21;;;:::i;:::-;1021:13853;14462:1;14448:15;;14462:1;;;14480:8;14467:21;;;:::i;:::-;1021:13853;14547:1;14533:15;;14547:1;;;14565:8;14552:21;;;:::i;:::-;1021:13853;14632:1;14618:15;;14632:1;;;14650:8;14637:21;;;:::i;:::-;1021:13853;14717:1;14703:15;;14717:1;;;14802;14735:8;;14722:21;;;:::i;:::-;1021:13853;14788:15;14784:47;;14091:781;:::o;14784:47::-;14820:8;14807:21;;;:::i;:::-;1021:13853;14091:781;:::o;14699:72::-;14754:14;;:::o;1021:13853::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;3736:794:38;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;1021:13853:72;4028:8:38;;1021:13853:72;;838:5:38;;;;;;:::i;4024:500::-;1021:13853:72;4093:9:38;;1021:13853:72;;838:5:38;;;;;;:::i;:::-;1021:13853:72;838:5:38;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;638:5;1021:13853:72;;;;;;;;;;;;;;;1186:122:38;;;;;;;;;;;638:5;1021:13853:72;638:5:38;;;;;;;4347:14;;;;;4381:8;;;1021:13853:72;4381:8:38;:::o;4343:171::-;638:5;;4460:21;:::o;11840:823:72:-;1021:13853;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1021:13853:72;;;:::i;:::-;;;;;;;12084:22;;;:::i;:::-;1021:13853;;12095:11;;;1021:13853;;;12120:22;;;:::i;:::-;12131:11;1021:13853;;;;12174:1;12160:15;;12174:1;;;12179:22;;;:::i;:::-;12190:11;1021:13853;;;;12258:1;12244:15;;12258:1;;;12263:22;;;:::i;:::-;12274:11;1021:13853;;;;12342:1;12328:15;;12342:1;;;12347:22;;;:::i;:::-;12358:11;1021:13853;;;;12426:1;12412:15;;12426:1;;;12431:22;;;:::i;:::-;12442:11;1021:13853;;;;12510:1;12496:15;;12510:1;;;12594;12515:22;;;;:::i;:::-;12526:11;;1021:13853;;;12580:15;12576:48;;12644:12;11840:823;:::o;12576:48::-;12599:22;;;:::i;:::-;12610:11;;1021:13853;;;11840:823;:::o;12492:71::-;12548:12;;;:::o;12669:1416::-;12835:26;;;:::i;:::-;12949:31;;12913:67;;;:::i;:::-;1021:13853;13030:31;12994:67;;;:::i;:::-;1021:13853;13093:1;13079:15;;13093:1;;;13134:31;13098:67;;;:::i;:::-;1021:13853;13264:1;13250:15;;13264:1;;;13305:31;13269:67;;;:::i;:::-;1021:13853;13434:1;13420:15;;13434:1;;;13475:31;13439:67;;;:::i;:::-;1021:13853;13604:1;13590:15;;13604:1;;;13645:31;13609:67;;;:::i;:::-;1021:13853;13775:1;13761:15;;13775:1;;;13946;13816:31;;13780:67;;;:::i;:::-;1021:13853;13932:15;13928:93;;12669:1416;:::o;13928:93::-;13987:31;13951:67;;;:::i;34375:314:59:-;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;1021:13853:72;;34608:34:59;;2648:13:39;;;;;;;;:::o;:::-;1021:13853:72;;;;;;;;;2648:13:39;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;1564:4;1021:13853:72;1564:4:39;5129:68;;1021:13853:72;5591:24:39;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;1021:13853:72;7316:5:39;1021:13853:72;7316:5:39;;7312:417;;5770:720;-1:-1:-1;9497:3:39;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;:::-;4496:2300;:::o;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:39;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;1021:13853:72;4181:19:39;;-1:-1:-1;9497:3:39;7312:417;;7074:112;7158:17;1021:13853:72;7158:17:39;;1021:13853:72;7158:17:39;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;1021:13853:72;6715:20:39;;1021:13853:72;6715:20:39;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;1021:13853:72;14954:10:39;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;1021:13853:72;2648:13:39;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;1021:13853:72;4181:19:39;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;1021:13853:72;5638:21:39;;1021:13853:72;5638:21:39;5129:68;5169:17;1021:13853:72;5169:17:39;;1021:13853:72;5169:17:39;4714:45;4740:8;;1021:13853:72;4740:8:39;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o"},"methodIdentifiers":{"calculateTVL(int256[])":"47bcac3b","decimals()":"313ce567","description()":"7284e416","getFeedData()":"af1296d3","getFeedTokenDecimalScalingFactors()":"cd2c9e70","getFeeds()":"7fe955d4","getRoundData(uint80)":"9a6fc8f5","getWeights()":"22acb867","latestRoundData()":"feaf968c","pool()":"16f0115b","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"contract IWeightedPool\",\"name\":\"pool_\",\"type\":\"address\"},{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"feeds\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"version_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"prices\",\"type\":\"int256[]\"}],\"name\":\"calculateTVL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tvl\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedData\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"prices\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedTokenDecimalScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeds\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"contract IWeightedPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{\"calculateTVL(int256[])\":{\"details\":\"Prices are defined the same way as in the oracle feed, and scaled to 18-decimal FP values.\",\"params\":{\"prices\":\"An array of prices for the tokens in the pool\"},\"returns\":{\"tvl\":\"TVL calculated from the prices and current weights\"}},\"decimals()\":{\"details\":\"Declared in AggregatorV3Interface.This is hard-coded to 18 decimals.\",\"returns\":{\"_0\":\"decimals The number of decimals\"}},\"description()\":{\"details\":\"Declared in AggregatorV3Interface.\",\"returns\":{\"_0\":\"description The description as a string\"}},\"getFeedData()\":{\"returns\":{\"prices\":\"An array of latest prices from the feeds\",\"updatedAt\":\"The timestamp of the last update\"}},\"getFeedTokenDecimalScalingFactors()\":{\"returns\":{\"_0\":\"An array of scaling factors corresponding to each feed.\"}},\"getFeeds()\":{\"returns\":{\"_0\":\"An array of AggregatorV3Interface instances representing the feeds.\"}},\"getRoundData(uint80)\":{\"details\":\"Declared in AggregatorV3Interface. This is unused, and always returns all zeros.\",\"returns\":{\"answer\":\"The answer for this round\",\"answeredInRound\":\"[Deprecated] - Previously used when answers could take multiple rounds to be computed\",\"roundId\":\"The round ID\",\"startedAt\":\"Timestamp when the round started\",\"updatedAt\":\"Timestamp when the round was updated\"}},\"getWeights()\":{\"returns\":{\"_0\":\"An array of weights corresponding to each token in the pool.\"}},\"latestRoundData()\":{\"details\":\"Declared in AggregatorV3Interface.\",\"returns\":{\"answer\":\"The answer for this round\",\"answeredInRound\":\"[Deprecated] - Previously used when answers could take multiple rounds to be computed\",\"roundId\":\"The round ID\",\"startedAt\":\"Timestamp when the round started\",\"updatedAt\":\"Timestamp when the round was updated\"}},\"version()\":{\"details\":\"Declared in AggregatorV3Interface.\",\"returns\":{\"_0\":\"version The numerical version number\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{\"calculateTVL(int256[])\":{\"notice\":\"Calculates the tvl based on the provided prices.\"},\"decimals()\":{\"notice\":\"Get the number of decimals present in the response value.\"},\"description()\":{\"notice\":\"Get the description of the underlying aggregator that the proxy points to.\"},\"getFeedData()\":{\"notice\":\"Gets the latest feed data.\"},\"getFeedTokenDecimalScalingFactors()\":{\"notice\":\"Gets the decimal scaling factors for each feed token.\"},\"getFeeds()\":{\"notice\":\"Gets the list of feeds used by the oracle.\"},\"getRoundData(uint80)\":{\"notice\":\"Get data about a specific round, using the roundId.\"},\"getWeights()\":{\"notice\":\"Gets the current weights of the tokens in the pool.\"},\"latestRoundData()\":{\"notice\":\"Get the data from the latest round.\"},\"version()\":{\"notice\":\"Get the version of the oracle.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/WeightedLPOracle.sol\":\"WeightedLPOracle\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\":{\"keccak256\":\"0xab6ca6305d0ca426f5b456925e487a9e0bbd41b77d9bf3a4321296459a1b586f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7bf6bb63d1fdf1d2ba6cf6835b36f201aaf36092f80185774d123494ee3c9fdf\",\"dweb:/ipfs/QmeN9rfPZtGQrFo5mDG144Vz48GWGDQCqXeQ8WaKTDXCMk\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/WeightedLPOracle.sol\":{\"keccak256\":\"0xd40cc2c85ee6c7c3432ebb1b70f6b3979b4c30f6de146ef839cdc9857ade3689\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://60cd9f72384bfaab5add9fc8e99d140745132574cf07a1188338091db43b861c\",\"dweb:/ipfs/Qma1eaCo7r9pDi9SN9PKTP4t9616HFKVczess8b4Thxooe\"]}},\"version\":1}"}},"contracts/WeightedLPOracleFactory.sol":{"WeightedLPOracleFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint256","name":"oracleVersion","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IWeightedPool","name":"pool","type":"address"},{"indexed":false,"internalType":"contract IWeightedLPOracle","name":"oracle","type":"address"},{"indexed":false,"internalType":"uint256","name":"oracleVersion","type":"uint256"}],"name":"WeightedLPOracleCreated","type":"event"},{"inputs":[{"internalType":"contract IWeightedPool","name":"pool","type":"address"},{"internalType":"contract AggregatorV3Interface[]","name":"feeds","type":"address[]"}],"name":"create","outputs":[{"internalType":"contract IWeightedLPOracle","name":"oracle","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IWeightedPool","name":"pool","type":"address"}],"name":"getOracle","outputs":[{"internalType":"contract IWeightedLPOracle","name":"oracle","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100a257601f612ef638819003918201601f19168301916001600160401b038311848410176100a65780849260409485528339810103126100a25780516001600160a01b038116918282036100a257602001519130608052156100935760a0525f55604051612e3b90816100bb82396080518161063d015260a0518181816101190152818161043801526104c90152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049081361015610015575f80fd5b5f35928360e01c90816310d3d22e1461053d57508063851c1bb3146104ed5780638d928af81461049d578063aaabadc5146103e45763cd1d977614610058575f80fd5b3461033c578060031936011261033c57610070610581565b602480359467ffffffffffffffff9485871161033c573660238801121561033c5786810135958087116103b9578660051b926020988751986100b48b87018b6105a4565b89528989018681968301019136831161033c578701905b82821061038d575050507fffffffff000000000000000000000000000000000000000000000000000000006101009116610612565b73ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016918851907faaabadc50000000000000000000000000000000000000000000000000000000082528b828781875afa91821561038357918c918a935f92610351575b506064908c5194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528b840152338d840152306044840152165afa908115610347575f9161030d575b50156102e6575f54938851966127519182890195898710908711176102bc57505086959493929188916106b58839608084019284521698898b8401526080898401525180915260a0820193905f5b8b8282106102a357505050506060015203905ff08015610299571691805f5260018452815f20837fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557ffe0fe762010efd636b9d44c1b529d2343a72d14538bd28a5a873e29e5e8956f2825f5481519086825287820152a251908152f35b82513d5f823e3d90fd5b83518a1687528897509586019590920191600101610216565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b837f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508a81813d8311610340575b61032481836105a4565b8101031261033c5751801515810361033c575f6101c8565b5f80fd5b503d61031a565b89513d5f823e3d90fd5b606491925061037590843d861161037c575b61036d81836105a4565b810190610688565b919061017a565b503d610363565b8a513d5f823e3d90fd5b813573ffffffffffffffffffffffffffffffffffffffff8116810361033c578152908b01908b016100cb565b836041837f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50903461033c575f60031936011261033c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561049357926020935f93610474575b505191168152f35b61048c919350843d861161037c5761036d81836105a4565b918461046c565b83513d5f823e3d90fd5b503461033c575f60031936011261033c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50903461033c57602060031936011261033c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361033c57610536602092610612565b9051908152f35b90503461033c57602060031936011261033c5760209173ffffffffffffffffffffffffffffffffffffffff9081610572610581565b165f52600184525f2054168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176105e55760405251902090565b9081602091031261033c575173ffffffffffffffffffffffffffffffffffffffff8116810361033c579056fe6104006040908082523461066757612751803803809161001f82856107bf565b833981016080828203126106675781516001600160a01b0392838216918281036106675760209586830151968688169788810361066757848301516001600160401b03919082811161066757860194601f96898888011215610667578651996100878b6107f6565b976100948851998a6107bf565b8b8952868901908760059d8e1b820101928311610667578701905b8282106107a7575050506060015160c05260805260a05282519863ca4f280360e01b8a525f8a60248160049a858c8301525afa998a15610710575f9a61071a575b50985f8798999a85519889809263f89f27ed60e01b82525afa968715610710575f97610688575b5051948560e052875f8b60a051168651928380926395d89b4160e01b82525afa90811561067e579084915f916105eb575b5060246101799187519381859251918291018984015e8101630bd554d160e21b88820152038b8101845201826107bf565b80519283116105d8575f54936001948581811c911680156105ce575b828210146105bb57838111610579575b508092841160011461051757509282939183925f9461050c575b50501b915f199060031b1c1916175f555b815183036104fe57866101e28361080d565b5116916102009283526101f48561080d565b5197610100988952610210816102098461080d565b511661089f565b956103009687526007826102238561082e565b5116966102209788526102358361082e565b519a6101209b8c5261024a856102098861082e565b9a6103209b8c52600283116104ca575b60038311610496575b8211610462575b811161042e575b600681116103fa575b116103c4575b5050505194611df09687610961883960805187818161012601526108ab015260a0518781816101000152818161068e0152610850015260c05187610558015260e05187818161027a0152818161036f015281816106400152818161080e0152610b6101525186610db501525185610de001526101405185610e1401526101605185610e4801526101805185610e7c01526101a05185610eb001526101c05185610ee701526101e05185610f1a0152518461109c015251836110c901526102405183611100015261026051836111370152610280518361116e01526102a051836111a501526102c051836111e001526102e051836112170152518261124d01525181611278015261034051816112ac015261036051816112e00152610380518161131401526103a0518161134801526103c0518161137f01526103e051816113b20152f35b826103e461020992846103d96103ee9761088e565b51166102e05261088e565b516101e05261088e565b6103e0525f8080610280565b836104048661087e565b51166102c0526104138361087e565b516101c052610425846102098761087e565b6103c05261027a565b836104388661086e565b51166102a0526104478361086e565b516101a052610459846102098761086e565b6103a052610271565b8461046c8761085e565b51166102805261047b8461085e565b516101805261048d856102098861085e565b6103805261026a565b856104a08861084e565b5116610260526104af8561084e565b51610160526104c1866102098961084e565b61036052610263565b856104d48861083e565b5116610240526104e38561083e565b51610140526104f5866102098961083e565b6103405261025a565b8463aaad13f760e01b5f525ffd5b015192505f806101bf565b919083601f1981165f8052845f20945f905b8883831061055f5750505010610547575b505050811b015f556101d0565b01515f1960f88460031b161c191690555f808061053a565b858701518855909601959485019487935090810190610529565b5f8052815f20848d818801901c8201928488106105b2575b018d1c019086905b8281106105a75750506101a5565b5f8155018690610599565b92508192610591565b60228b634e487b7160e01b5f525260245ffd5b90607f1690610195565b604189634e487b7160e01b5f525260245ffd5b9150503d805f833e6105fd81836107bf565b81019084818303126106675780519084821161066757018183820112156106675780519084821161066b5786519261063d838601601f19168801856107bf565b8284528683830101116106675785925f84846101799582602496018386015e830101529150610148565b5f80fd5b60418b634e487b7160e01b5f525260245ffd5b85513d5f823e3d90fd5b9096503d805f833e61069a81836107bf565b8101908381830312610667578051908382116106675701908087830112156106675781516106c7816107f6565b926106d4875194856107bf565b81845285808501928d1b8201019283116106675785809101915b8383106107005750505050955f610117565b82518152918101918691016106ee565b84513d5f823e3d90fd5b99503d805f8c3e61072b818c6107bf565b8a019983818c03126106675780519083821161066757019980878c011215610667578a51610758816107f6565b9b858088519e8f9061076a90826107bf565b84815201928c1b820101928311610667578501905b82821061078f575050505f6100f0565b81518c8116810361066757815290850190850161077f565b8151808f1681036106675781529087019087016100af565b601f909101601f19168101906001600160401b038211908210176107e257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116107e25760051b60200190565b80511561081a5760200190565b634e487b7160e01b5f52603260045260245ffd5b80516001101561081a5760400190565b80516002101561081a5760600190565b80516003101561081a5760800190565b80516004101561081a5760a00190565b80516005101561081a5760c00190565b80516006101561081a5760e00190565b80516007101561081a576101000190565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015610955575f90610918575b60ff9150166012811161090957601203601281116108f557604d81116108f557600a0a90565b634e487b7160e01b5f52601160045260245ffd5b636a78e98160e11b5f5260045ffd5b506020813d60201161094d575b81610932602093836107bf565b81010312610667575160ff811681036106675760ff906108cf565b3d9150610925565b6040513d5f823e3d90fdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146106645750806322acb86714610626578063313ce5671461060b57806347bcac3b1461057b57806354fd4d50146105415780637284e416146103ed5780637fe955d4146103595780639a6fc8f514610312578063af1296d3146102b5578063cd2c9e70146102605763feaf968c14610098575f80fd5b3461024a575f60031936011261024a576100bc60246100b5610b5f565b929061080c565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610256575f9261021e575b5081156101f857670de0b6b3a7640000948581029581870414901517156101cc57506101b08460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026113da565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d60201161024e575b8161023a602093836106e5565b8101031261024a5751905f610156565b5f80fd5b3d915061022d565b84513d5f823e3d90fd5b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000611241565b90519182916020835260208301906106b2565b0390f35b503461024a575f60031936011261024a576102ce610b5f565b91805191818301918352805180925260608301916020809201915f5b8281106102fe578580868960208301520390f35b8351855293810193928101926001016102ea565b50903461024a57602060031936011261024a573569ffffffffffffffffffff81160361024a57805f60a09251918183528160208401528201525f60608201525f6080820152f35b503461024a575f60031936011261024a576103937f000000000000000000000000000000000000000000000000000000000000000061104c565b908051918291602090602080850191818652845180935285019301915f5b8281106103c057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016103b1565b503461024a575f60031936011261024a5780515f5f549060018260011c9060018416938415610537575b602097888410861461050b57509187918694938286528386019690815f146104d1575060011461047b575b50505091610457601f92601f199403856106e5565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104bb575050508201018582601f19610442565b80548885018601528795509284019281016104a4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610442565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610417565b503461024a575f60031936011261024a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461024a5760208060031936011261024a5782359267ffffffffffffffff841161024a573660238501121561024a57830135926105b884610735565b936105c5845195866106e5565b8085526024602086019160051b8301019136831161024a57602401905b8282106105fc576020856105f58861080c565b9051908152f35b813581529083019083016105e2565b503461024a575f60031936011261024a576020905160128152f35b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000610da9565b3461024a575f60031936011261024a5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106106d1575050505090565b8351855293810193928101926001016106c3565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116107085760051b60200190565b80511561075a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561075a5760400190565b80516002101561075a5760600190565b80516003101561075a5760800190565b80516004101561075a5760a00190565b80516005101561075a5760c00190565b80516006101561075a5760e00190565b80516007101561075a576101000190565b805182101561075a5760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061083782610da9565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b3e575f91610aac575b5060209061091d92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906106b2565b5f602483015203915afa968715610aa357505f96610a6f575b5093929190670de0b6b3a7640000945f945b84861061096c57505050505050670de0b6b3a76400009161096891610f4a565b0490565b90919293949561097c87836107f8565b515f8112610a455761098e88856107f8565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610a1a5780156109ef576001926109dc670de0b6b3a7640000936109e2936109d48d8a6107f8565b519104610f8a565b90610f4a565b0496019493929190610948565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610a9b575b81610a8b602093836106e5565b8101031261024a5751945f610936565b3d9150610a7e565b513d5f823e3d90fd5b90503d805f833e610abd81836106e5565b810190602090818184031261024a5780519067ffffffffffffffff821161024a57019180601f8401121561024a578251610af681610735565b93610b038c5195866106e5565b818552838086019260051b82010192831161024a578301905b828210610b2f575050505061091d6108db565b81518152908301908301610b1c565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361024a57565b7f000000000000000000000000000000000000000000000000000000000000000090610b8a8261104c565b90610b9483611241565b91610b9e84610735565b604094610bae60405192836106e5565b808252610bba81610735565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610bfe5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610c248a846107f8565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610d6e575f925f94610d16575b5050610c7f610c798d886107f8565b516113da565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610cea5781840514901517156101cc57509060019291610ccb8c8b6107f8565b5280821015610ce357505b9801959493929190610bee565b9050610cd6565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610d67575b610d2f81836106e5565b8101031261024a57610d4081610b48565b9187820151918781015192610d5c608060608401519301610b48565b94509250925f610c6a565b503d610d25565b87513d5f823e3d90fd5b90610d8282610735565b610d8f60405191826106e5565b828152601f19610d9f8294610735565b0190602036910137565b610db281610d78565b907f0000000000000000000000000000000000000000000000000000000000000000610ddd8361074d565b527f0000000000000000000000000000000000000000000000000000000000000000610e0883610787565b526002811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e3c83610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e70836107a7565b526004811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ea4836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ed8836107c7565b526006811115610f46576007907f0000000000000000000000000000000000000000000000000000000000000000610f0f846107d7565b5211610f185790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b5290565b5090565b81810292918115918404141715610f5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a764000091808303610fa15750905090565b8290671bc16d674ec800008103610fbe5750508061096891610f4a565b673782dace9d9000008103610fe25750610fdb8261096893610f4a565b0480610f4a565b9050610fed91611480565b612710808202908282041482151715610f5d5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff938483010401901515029060018201808311610f5d57811015611047575050505f90565b030190565b61105581610735565b9061106360405192836106e5565b808252601f1961107282610735565b013660208401376110828261074d565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526110c783610787565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561123c576110fe83610797565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561123c57611135836107a7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561123c5761116c836107b7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561123c576111a3836107c7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561123c576007906111dd846107d7565b837f00000000000000000000000000000000000000000000000000000000000000001690521161120b575090565b611214826107e7565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61124a81610d78565b907f00000000000000000000000000000000000000000000000000000000000000006112758361074d565b527f00000000000000000000000000000000000000000000000000000000000000006112a083610787565b526002811115610f46577f00000000000000000000000000000000000000000000000000000000000000006112d483610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611308836107a7565b526004811115610f46577f000000000000000000000000000000000000000000000000000000000000000061133c836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611370836107c7565b526006811115610f46576007907f00000000000000000000000000000000000000000000000000000000000000006113a7846107d7565b52116113b05790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116114045790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611449576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611449570590565b908015611dac578115611da6578160ff1c611d7e57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611d565781670c7d713b49da00001280611d45575b156119e257670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611519908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611476565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806119cf575b156119a757819082121580611994575b1561196c575f915f811261195d575b506064906806f05b59d3b200000081126118fa577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156118c1575b6856bc75e2d631000000811215611887575b682b5e3af16b1880000081121561184f575b6815af1d78b58c400000811215611817575b680ad78ebc5ac62000008112156117e0575b828112156117a9575b6802b5e3af16b1880000811215611772575b68015af1d78b58c4000081121561173b575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611738576117389061142f565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906116b9565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906116a7565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611695565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061168c565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061167a565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611668565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611656565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611644565b6803782dace9d9000000811261194a577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261162f565b68056bc75e2d631000008260019261162f565b600192505f03905060646115d3565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115c4565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115b4565b81670de0b6b3a7640000925f91848112611d2f575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d04575b73011798004d755d3c8bc8e03204cf44619e000000821215611ce3575b820290808302906e01855144814a7ff805980ff00840009081831215611cc0575b50506b02df0ab5a80a22c61ab5a70080821215611ca0575b50693f1fce3da636ea5cf85080821215611c80575b50690127fa27722cc06cc5e280821215611c60575b5068280e60114edb805d0380821215611c40575b50680ebc5fb4174612111080821215611c29575b506808f00f760a4b2db55d80821215611c09575b506806f5f177578893793780821215611be9575b506806248f33704b28660380821215611bca575b506805c548670b9510e7ac80821215611bab575b50611b5868056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611476565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611ba6575f035b02611588565b611ba0565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b1c565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b08565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611af4565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611ae0565b68056bc75e2d63100000809202059101905f611acc565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611ab8565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611aa4565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611a8f565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611a7a565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611a62565b906b1425982cf597cd205cef73806803782dace9d900000091059101611a41565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a24565b9050611d3b915061142f565b60019060646119f7565b50670f43fc2c04ee000082126114c6565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220659c979dfe41d02b29882b7d46ec0a2e92eadb9c4641e40f6c89f036fb5a967b64736f6c634300081b0033a26469706673582212208d8af8eb1f4e81bf0d263eaa3254924e6e0cb2db28818649a5edb0f6ed5e1eef64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x1F PUSH2 0x2EF6 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xA6 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xA2 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 DUP3 DUP3 SUB PUSH2 0xA2 JUMPI PUSH1 0x20 ADD MLOAD SWAP2 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x93 JUMPI PUSH1 0xA0 MSTORE PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH2 0x2E3B SWAP1 DUP2 PUSH2 0xBB DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x63D ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x119 ADD MSTORE DUP2 DUP2 PUSH2 0x438 ADD MSTORE PUSH2 0x4C9 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP3 DUP4 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x10D3D22E EQ PUSH2 0x53D JUMPI POP DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x49D JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x3E4 JUMPI PUSH4 0xCD1D9776 EQ PUSH2 0x58 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x33C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH2 0x70 PUSH2 0x581 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP8 GT PUSH2 0x33C JUMPI CALLDATASIZE PUSH1 0x23 DUP9 ADD SLT ISZERO PUSH2 0x33C JUMPI DUP7 DUP2 ADD CALLDATALOAD SWAP6 DUP1 DUP8 GT PUSH2 0x3B9 JUMPI DUP7 PUSH1 0x5 SHL SWAP3 PUSH1 0x20 SWAP9 DUP8 MLOAD SWAP9 PUSH2 0xB4 DUP12 DUP8 ADD DUP12 PUSH2 0x5A4 JUMP JUMPDEST DUP10 MSTORE DUP10 DUP10 ADD DUP7 DUP2 SWAP7 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x33C JUMPI DUP8 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x38D JUMPI POP POP POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x100 SWAP2 AND PUSH2 0x612 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP2 DUP9 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP12 DUP3 DUP8 DUP2 DUP8 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 DUP13 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x351 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP13 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP12 DUP5 ADD MSTORE CALLER DUP14 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x347 JUMPI PUSH0 SWAP2 PUSH2 0x30D JUMPI JUMPDEST POP ISZERO PUSH2 0x2E6 JUMPI PUSH0 SLOAD SWAP4 DUP9 MLOAD SWAP7 PUSH2 0x2751 SWAP2 DUP3 DUP10 ADD SWAP6 DUP10 DUP8 LT SWAP1 DUP8 GT OR PUSH2 0x2BC JUMPI POP POP DUP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6B5 DUP9 CODECOPY PUSH1 0x80 DUP5 ADD SWAP3 DUP5 MSTORE AND SWAP9 DUP10 DUP12 DUP5 ADD MSTORE PUSH1 0x80 DUP10 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD SWAP4 SWAP1 PUSH0 JUMPDEST DUP12 DUP3 DUP3 LT PUSH2 0x2A3 JUMPI POP POP POP POP PUSH1 0x60 ADD MSTORE SUB SWAP1 PUSH0 CREATE DUP1 ISZERO PUSH2 0x299 JUMPI AND SWAP2 DUP1 PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xFE0FE762010EFD636B9D44C1B529D2343A72D14538BD28A5A873E29E5E8956F2 DUP3 PUSH0 SLOAD DUP2 MLOAD SWAP1 DUP7 DUP3 MSTORE DUP8 DUP3 ADD MSTORE LOG2 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 MLOAD DUP11 AND DUP8 MSTORE DUP9 SWAP8 POP SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x216 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP4 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x340 JUMPI JUMPDEST PUSH2 0x324 DUP2 DUP4 PUSH2 0x5A4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x33C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x33C JUMPI PUSH0 PUSH2 0x1C8 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x31A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x375 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x37C JUMPI JUMPDEST PUSH2 0x36D DUP2 DUP4 PUSH2 0x5A4 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x688 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x17A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x363 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x33C JUMPI DUP2 MSTORE SWAP1 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0xCB JUMP JUMPDEST DUP4 PUSH1 0x41 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x33C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x493 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x474 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x48C SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x37C JUMPI PUSH2 0x36D DUP2 DUP4 PUSH2 0x5A4 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x46C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x33C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x33C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x33C JUMPI PUSH2 0x536 PUSH1 0x20 SWAP3 PUSH2 0x612 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x33C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0x572 PUSH2 0x581 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x33C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5E5 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5E5 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x33C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x33C JUMPI SWAP1 JUMP INVALID PUSH2 0x400 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x667 JUMPI PUSH2 0x2751 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x80 DUP3 DUP3 SUB SLT PUSH2 0x667 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP3 AND SWAP2 DUP3 DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0x20 SWAP6 DUP7 DUP4 ADD MLOAD SWAP7 DUP7 DUP9 AND SWAP8 DUP9 DUP2 SUB PUSH2 0x667 JUMPI DUP5 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x667 JUMPI DUP7 ADD SWAP5 PUSH1 0x1F SWAP7 DUP10 DUP9 DUP9 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP7 MLOAD SWAP10 PUSH2 0x87 DUP12 PUSH2 0x7F6 JUMP JUMPDEST SWAP8 PUSH2 0x94 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x7BF JUMP JUMPDEST DUP12 DUP10 MSTORE DUP7 DUP10 ADD SWAP1 DUP8 PUSH1 0x5 SWAP14 DUP15 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP8 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7A7 JUMPI POP POP POP PUSH1 0x60 ADD MLOAD PUSH1 0xC0 MSTORE PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP3 MLOAD SWAP9 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP11 MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x4 SWAP11 DUP6 DUP13 DUP4 ADD MSTORE GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP11 PUSH2 0x71A JUMPI JUMPDEST POP SWAP9 PUSH0 DUP8 SWAP9 SWAP10 SWAP11 DUP6 MLOAD SWAP9 DUP10 DUP1 SWAP3 PUSH4 0xF89F27ED PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP8 PUSH2 0x688 JUMPI JUMPDEST POP MLOAD SWAP5 DUP6 PUSH1 0xE0 MSTORE DUP8 PUSH0 DUP12 PUSH1 0xA0 MLOAD AND DUP7 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67E JUMPI SWAP1 DUP5 SWAP2 PUSH0 SWAP2 PUSH2 0x5EB JUMPI JUMPDEST POP PUSH1 0x24 PUSH2 0x179 SWAP2 DUP8 MLOAD SWAP4 DUP2 DUP6 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP10 DUP5 ADD MCOPY DUP2 ADD PUSH4 0xBD554D1 PUSH1 0xE2 SHL DUP9 DUP3 ADD MSTORE SUB DUP12 DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP1 MLOAD SWAP3 DUP4 GT PUSH2 0x5D8 JUMPI PUSH0 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP6 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x5CE JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x5BB JUMPI DUP4 DUP2 GT PUSH2 0x579 JUMPI JUMPDEST POP DUP1 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x517 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x50C JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP2 MLOAD DUP4 SUB PUSH2 0x4FE JUMPI DUP7 PUSH2 0x1E2 DUP4 PUSH2 0x80D JUMP JUMPDEST MLOAD AND SWAP2 PUSH2 0x200 SWAP3 DUP4 MSTORE PUSH2 0x1F4 DUP6 PUSH2 0x80D JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x100 SWAP9 DUP10 MSTORE PUSH2 0x210 DUP2 PUSH2 0x209 DUP5 PUSH2 0x80D JUMP JUMPDEST MLOAD AND PUSH2 0x89F JUMP JUMPDEST SWAP6 PUSH2 0x300 SWAP7 DUP8 MSTORE PUSH1 0x7 DUP3 PUSH2 0x223 DUP6 PUSH2 0x82E JUMP JUMPDEST MLOAD AND SWAP7 PUSH2 0x220 SWAP8 DUP9 MSTORE PUSH2 0x235 DUP4 PUSH2 0x82E JUMP JUMPDEST MLOAD SWAP11 PUSH2 0x120 SWAP12 DUP13 MSTORE PUSH2 0x24A DUP6 PUSH2 0x209 DUP9 PUSH2 0x82E JUMP JUMPDEST SWAP11 PUSH2 0x320 SWAP12 DUP13 MSTORE PUSH1 0x2 DUP4 GT PUSH2 0x4CA JUMPI JUMPDEST PUSH1 0x3 DUP4 GT PUSH2 0x496 JUMPI JUMPDEST DUP3 GT PUSH2 0x462 JUMPI JUMPDEST DUP2 GT PUSH2 0x42E JUMPI JUMPDEST PUSH1 0x6 DUP2 GT PUSH2 0x3FA JUMPI JUMPDEST GT PUSH2 0x3C4 JUMPI JUMPDEST POP POP POP MLOAD SWAP5 PUSH2 0x1DF0 SWAP7 DUP8 PUSH2 0x961 DUP9 CODECOPY PUSH1 0x80 MLOAD DUP8 DUP2 DUP2 PUSH2 0x126 ADD MSTORE PUSH2 0x8AB ADD MSTORE PUSH1 0xA0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x100 ADD MSTORE DUP2 DUP2 PUSH2 0x68E ADD MSTORE PUSH2 0x850 ADD MSTORE PUSH1 0xC0 MLOAD DUP8 PUSH2 0x558 ADD MSTORE PUSH1 0xE0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x27A ADD MSTORE DUP2 DUP2 PUSH2 0x36F ADD MSTORE DUP2 DUP2 PUSH2 0x640 ADD MSTORE DUP2 DUP2 PUSH2 0x80E ADD MSTORE PUSH2 0xB61 ADD MSTORE MLOAD DUP7 PUSH2 0xDB5 ADD MSTORE MLOAD DUP6 PUSH2 0xDE0 ADD MSTORE PUSH2 0x140 MLOAD DUP6 PUSH2 0xE14 ADD MSTORE PUSH2 0x160 MLOAD DUP6 PUSH2 0xE48 ADD MSTORE PUSH2 0x180 MLOAD DUP6 PUSH2 0xE7C ADD MSTORE PUSH2 0x1A0 MLOAD DUP6 PUSH2 0xEB0 ADD MSTORE PUSH2 0x1C0 MLOAD DUP6 PUSH2 0xEE7 ADD MSTORE PUSH2 0x1E0 MLOAD DUP6 PUSH2 0xF1A ADD MSTORE MLOAD DUP5 PUSH2 0x109C ADD MSTORE MLOAD DUP4 PUSH2 0x10C9 ADD MSTORE PUSH2 0x240 MLOAD DUP4 PUSH2 0x1100 ADD MSTORE PUSH2 0x260 MLOAD DUP4 PUSH2 0x1137 ADD MSTORE PUSH2 0x280 MLOAD DUP4 PUSH2 0x116E ADD MSTORE PUSH2 0x2A0 MLOAD DUP4 PUSH2 0x11A5 ADD MSTORE PUSH2 0x2C0 MLOAD DUP4 PUSH2 0x11E0 ADD MSTORE PUSH2 0x2E0 MLOAD DUP4 PUSH2 0x1217 ADD MSTORE MLOAD DUP3 PUSH2 0x124D ADD MSTORE MLOAD DUP2 PUSH2 0x1278 ADD MSTORE PUSH2 0x340 MLOAD DUP2 PUSH2 0x12AC ADD MSTORE PUSH2 0x360 MLOAD DUP2 PUSH2 0x12E0 ADD MSTORE PUSH2 0x380 MLOAD DUP2 PUSH2 0x1314 ADD MSTORE PUSH2 0x3A0 MLOAD DUP2 PUSH2 0x1348 ADD MSTORE PUSH2 0x3C0 MLOAD DUP2 PUSH2 0x137F ADD MSTORE PUSH2 0x3E0 MLOAD DUP2 PUSH2 0x13B2 ADD MSTORE RETURN JUMPDEST DUP3 PUSH2 0x3E4 PUSH2 0x209 SWAP3 DUP5 PUSH2 0x3D9 PUSH2 0x3EE SWAP8 PUSH2 0x88E JUMP JUMPDEST MLOAD AND PUSH2 0x2E0 MSTORE PUSH2 0x88E JUMP JUMPDEST MLOAD PUSH2 0x1E0 MSTORE PUSH2 0x88E JUMP JUMPDEST PUSH2 0x3E0 MSTORE PUSH0 DUP1 DUP1 PUSH2 0x280 JUMP JUMPDEST DUP4 PUSH2 0x404 DUP7 PUSH2 0x87E JUMP JUMPDEST MLOAD AND PUSH2 0x2C0 MSTORE PUSH2 0x413 DUP4 PUSH2 0x87E JUMP JUMPDEST MLOAD PUSH2 0x1C0 MSTORE PUSH2 0x425 DUP5 PUSH2 0x209 DUP8 PUSH2 0x87E JUMP JUMPDEST PUSH2 0x3C0 MSTORE PUSH2 0x27A JUMP JUMPDEST DUP4 PUSH2 0x438 DUP7 PUSH2 0x86E JUMP JUMPDEST MLOAD AND PUSH2 0x2A0 MSTORE PUSH2 0x447 DUP4 PUSH2 0x86E JUMP JUMPDEST MLOAD PUSH2 0x1A0 MSTORE PUSH2 0x459 DUP5 PUSH2 0x209 DUP8 PUSH2 0x86E JUMP JUMPDEST PUSH2 0x3A0 MSTORE PUSH2 0x271 JUMP JUMPDEST DUP5 PUSH2 0x46C DUP8 PUSH2 0x85E JUMP JUMPDEST MLOAD AND PUSH2 0x280 MSTORE PUSH2 0x47B DUP5 PUSH2 0x85E JUMP JUMPDEST MLOAD PUSH2 0x180 MSTORE PUSH2 0x48D DUP6 PUSH2 0x209 DUP9 PUSH2 0x85E JUMP JUMPDEST PUSH2 0x380 MSTORE PUSH2 0x26A JUMP JUMPDEST DUP6 PUSH2 0x4A0 DUP9 PUSH2 0x84E JUMP JUMPDEST MLOAD AND PUSH2 0x260 MSTORE PUSH2 0x4AF DUP6 PUSH2 0x84E JUMP JUMPDEST MLOAD PUSH2 0x160 MSTORE PUSH2 0x4C1 DUP7 PUSH2 0x209 DUP10 PUSH2 0x84E JUMP JUMPDEST PUSH2 0x360 MSTORE PUSH2 0x263 JUMP JUMPDEST DUP6 PUSH2 0x4D4 DUP9 PUSH2 0x83E JUMP JUMPDEST MLOAD AND PUSH2 0x240 MSTORE PUSH2 0x4E3 DUP6 PUSH2 0x83E JUMP JUMPDEST MLOAD PUSH2 0x140 MSTORE PUSH2 0x4F5 DUP7 PUSH2 0x209 DUP10 PUSH2 0x83E JUMP JUMPDEST PUSH2 0x340 MSTORE PUSH2 0x25A JUMP JUMPDEST DUP5 PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x1BF JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x55F JUMPI POP POP POP LT PUSH2 0x547 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x1D0 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x53A JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x529 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP14 DUP2 DUP9 ADD SWAP1 SHR DUP3 ADD SWAP3 DUP5 DUP9 LT PUSH2 0x5B2 JUMPI JUMPDEST ADD DUP14 SHR ADD SWAP1 DUP7 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x5A7 JUMPI POP POP PUSH2 0x1A5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP7 SWAP1 PUSH2 0x599 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x591 JUMP JUMPDEST PUSH1 0x22 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x195 JUMP JUMPDEST PUSH1 0x41 DUP10 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5FD DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP5 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x667 JUMPI ADD DUP2 DUP4 DUP3 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x66B JUMPI DUP7 MLOAD SWAP3 PUSH2 0x63D DUP4 DUP7 ADD PUSH1 0x1F NOT AND DUP9 ADD DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP3 DUP5 MSTORE DUP7 DUP4 DUP4 ADD ADD GT PUSH2 0x667 JUMPI DUP6 SWAP3 PUSH0 DUP5 DUP5 PUSH2 0x179 SWAP6 DUP3 PUSH1 0x24 SWAP7 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP2 POP PUSH2 0x148 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x69A DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP1 DUP1 DUP8 DUP4 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP2 MLOAD PUSH2 0x6C7 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP3 PUSH2 0x6D4 DUP8 MLOAD SWAP5 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 DUP14 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 DUP1 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x700 JUMPI POP POP POP POP SWAP6 PUSH0 PUSH2 0x117 JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP7 SWAP2 ADD PUSH2 0x6EE JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP RETURNDATASIZE DUP1 PUSH0 DUP13 RETURNDATACOPY PUSH2 0x72B DUP2 DUP13 PUSH2 0x7BF JUMP JUMPDEST DUP11 ADD SWAP10 DUP4 DUP2 DUP13 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP10 DUP1 DUP8 DUP13 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP11 MLOAD PUSH2 0x758 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP12 DUP6 DUP1 DUP9 MLOAD SWAP15 DUP16 SWAP1 PUSH2 0x76A SWAP1 DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 DUP13 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x78F JUMPI POP POP POP PUSH0 PUSH2 0xF0 JUMP JUMPDEST DUP2 MLOAD DUP13 DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST DUP2 MLOAD DUP1 DUP16 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x7E2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x7E2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x81A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x81A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 PUSH1 0x20 SWAP1 DUP3 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x955 JUMPI PUSH0 SWAP1 PUSH2 0x918 JUMPI JUMPDEST PUSH1 0xFF SWAP2 POP AND PUSH1 0x12 DUP2 GT PUSH2 0x909 JUMPI PUSH1 0x12 SUB PUSH1 0x12 DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0x4D DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x6A78E981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x94D JUMPI JUMPDEST DUP2 PUSH2 0x932 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x667 JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0xFF SWAP1 PUSH2 0x8CF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x925 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16F0115B EQ PUSH2 0x664 JUMPI POP DUP1 PUSH4 0x22ACB867 EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0x47BCAC3B EQ PUSH2 0x57B JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x541 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x7FE955D4 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0xAF1296D3 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xCD2C9E70 EQ PUSH2 0x260 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0xBC PUSH1 0x24 PUSH2 0xB5 PUSH2 0xB5F JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x80C JUMP JUMPDEST SWAP4 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP1 PUSH32 0x0 AND DUP7 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x256 JUMPI PUSH0 SWAP3 PUSH2 0x21E JUMPI JUMPDEST POP DUP2 ISZERO PUSH2 0x1F8 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP PUSH2 0x1B0 DUP5 PUSH1 0x1 PUSH0 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 SWAP9 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x13DA JUMP JUMPDEST SWAP3 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24E JUMPI JUMPDEST DUP2 PUSH2 0x23A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x156 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x22D JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0x1241 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2CE PUSH2 0xB5F JUMP JUMPDEST SWAP2 DUP1 MLOAD SWAP2 DUP2 DUP4 ADD SWAP2 DUP4 MSTORE DUP1 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD SWAP2 PUSH1 0x20 DUP1 SWAP3 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FE JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2EA JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0x24A JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x393 PUSH32 0x0 PUSH2 0x104C JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3C0 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3B1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x537 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x50B JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x4D1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x47B JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x457 PUSH1 0x1F SWAP3 PUSH1 0x1F NOT SWAP5 SUB DUP6 PUSH2 0x6E5 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x4BB JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x4A4 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x417 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP3 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x24A JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP4 ADD CALLDATALOAD SWAP3 PUSH2 0x5B8 DUP5 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0x5C5 DUP5 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x24A JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5FC JUMPI PUSH1 0x20 DUP6 PUSH2 0x5F5 DUP9 PUSH2 0x80C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5E2 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0xDA9 JUMP JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6D1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x6C3 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x708 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x75A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x837 DUP3 PUSH2 0xDA9 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x40 SWAP5 DUP6 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 SWAP3 DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP2 SWAP9 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB3E JUMPI PUSH0 SWAP2 PUSH2 0xAAC JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH2 0x91D SWAP3 DUP10 MLOAD DUP1 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP2 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xAA3 JUMPI POP PUSH0 SWAP7 PUSH2 0xA6F JUMPI JUMPDEST POP SWAP4 SWAP3 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH0 SWAP5 JUMPDEST DUP5 DUP7 LT PUSH2 0x96C JUMPI POP POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x97C DUP8 DUP4 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH0 DUP2 SLT PUSH2 0xA45 JUMPI PUSH2 0x98E DUP9 DUP6 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH8 0xDE0B6B3A7640000 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xA1A JUMPI DUP1 ISZERO PUSH2 0x9EF JUMPI PUSH1 0x1 SWAP3 PUSH2 0x9DC PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x9E2 SWAP4 PUSH2 0x9D4 DUP14 DUP11 PUSH2 0x7F8 JUMP JUMPDEST MLOAD SWAP2 DIV PUSH2 0xF8A JUMP JUMPDEST SWAP1 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP7 ADD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x948 JUMP JUMPDEST DUP7 PUSH1 0x12 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 SWAP1 DUP6 PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP6 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA9B JUMPI JUMPDEST DUP2 PUSH2 0xA8B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP5 PUSH0 PUSH2 0x936 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA7E JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xABD DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x24A JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x24A JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP3 MLOAD PUSH2 0xAF6 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0xB03 DUP13 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x24A JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xB2F JUMPI POP POP POP POP PUSH2 0x91D PUSH2 0x8DB JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB1C JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x24A JUMPI JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0xB8A DUP3 PUSH2 0x104C JUMP JUMPDEST SWAP1 PUSH2 0xB94 DUP4 PUSH2 0x1241 JUMP JUMPDEST SWAP2 PUSH2 0xB9E DUP5 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x40 SWAP5 PUSH2 0xBAE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0xBBA DUP2 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP6 JUMPDEST DUP5 DUP8 LT PUSH2 0xBFE JUMPI POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC24 DUP11 DUP5 PUSH2 0x7F8 JUMP JUMPDEST MLOAD AND DUP5 MLOAD DUP1 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0xA0 SWAP3 DUP4 SWAP2 PUSH1 0x4 SWAP4 DUP5 SWAP2 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xD6E JUMPI PUSH0 SWAP3 PUSH0 SWAP5 PUSH2 0xD16 JUMPI JUMPDEST POP POP PUSH2 0xC7F PUSH2 0xC79 DUP14 DUP9 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH2 0x13DA JUMP JUMPDEST SWAP2 DUP3 DUP2 MUL SWAP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH0 DUP4 SLT AND PUSH2 0xCEA JUMPI DUP2 DUP5 SDIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH2 0xCCB DUP13 DUP12 PUSH2 0x7F8 JUMP JUMPDEST MSTORE DUP1 DUP3 LT ISZERO PUSH2 0xCE3 JUMPI POP JUMPDEST SWAP9 ADD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x11 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 SWAP5 POP DUP2 SWAP4 POP RETURNDATASIZE DUP4 GT PUSH2 0xD67 JUMPI JUMPDEST PUSH2 0xD2F DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI PUSH2 0xD40 DUP2 PUSH2 0xB48 JUMP JUMPDEST SWAP2 DUP8 DUP3 ADD MLOAD SWAP2 DUP8 DUP2 ADD MLOAD SWAP3 PUSH2 0xD5C PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0xB48 JUMP JUMPDEST SWAP5 POP SWAP3 POP SWAP3 PUSH0 PUSH2 0xC6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD25 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0xD82 DUP3 PUSH2 0x735 JUMP JUMPDEST PUSH2 0xD8F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x6E5 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xD9F DUP3 SWAP5 PUSH2 0x735 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH2 0xDB2 DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xDDD DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0xE08 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE3C DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE70 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xEA4 DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xED8 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0xF0F DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0xF18 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0xFA1 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0xFBE JUMPI POP POP DUP1 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0xFE2 JUMPI POP PUSH2 0xFDB DUP3 PUSH2 0x968 SWAP4 PUSH2 0xF4A JUMP JUMPDEST DIV DUP1 PUSH2 0xF4A JUMP JUMPDEST SWAP1 POP PUSH2 0xFED SWAP2 PUSH2 0x1480 JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0xF5D JUMPI PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0xF5D JUMPI DUP2 LT ISZERO PUSH2 0x1047 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST PUSH2 0x1055 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP1 PUSH2 0x1063 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1F NOT PUSH2 0x1072 DUP3 PUSH2 0x735 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH2 0x1082 DUP3 PUSH2 0x74D JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP1 MSTORE PUSH2 0x10C7 DUP4 PUSH2 0x787 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x10FE DUP4 PUSH2 0x797 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x1135 DUP4 PUSH2 0x7A7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x116C DUP4 PUSH2 0x7B7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x11A3 DUP4 PUSH2 0x7C7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH1 0x7 SWAP1 PUSH2 0x11DD DUP5 PUSH2 0x7D7 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP1 MSTORE GT PUSH2 0x120B JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x1214 DUP3 PUSH2 0x7E7 JUMP JUMPDEST SWAP1 PUSH32 0x0 AND SWAP1 MSTORE SWAP1 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x124A DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1275 DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x12A0 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x12D4 DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1308 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x133C DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1370 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x13A7 DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0x13B0 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1404 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1449 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x1449 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1DAC JUMPI DUP2 ISZERO PUSH2 0x1DA6 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1D7E JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1D56 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1D45 JUMPI JUMPDEST ISZERO PUSH2 0x19E2 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1519 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x19CF JUMPI JUMPDEST ISZERO PUSH2 0x19A7 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x1994 JUMPI JUMPDEST ISZERO PUSH2 0x196C JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x195D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x18FA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x18C1 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x1887 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x184F JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1817 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x17E0 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x17A9 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x1772 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x173B JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x1738 JUMPI PUSH2 0x1738 SWAP1 PUSH2 0x142F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16B9 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16A7 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1695 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x168C JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x167A JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1668 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1656 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x1644 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x194A JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x15D3 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15C4 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15B4 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1D2F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1D04 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1CE3 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1CC0 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1CA0 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1C80 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1C60 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1C40 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1C29 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1C09 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1BE9 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1BCA JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1BAB JUMPI JUMPDEST POP PUSH2 0x1B58 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1BA6 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x1588 JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B1C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AF4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AE0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1ACC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AB8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AA4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A7A JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1A62 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1A41 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1A24 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D3B SWAP2 POP PUSH2 0x142F JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x19F7 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x14C6 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x9C979DFE41D0 0x2B 0x29 DUP9 0x2B PUSH30 0x46EC0A2E92EADB9C4641E40F6C89F036FB5A967B64736F6C634300081B00 CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 DUP11 0xF8 0xEB 0x1F 0x4E DUP2 0xBF 0xD 0x26 RETURNDATACOPY 0xAA ORIGIN SLOAD SWAP3 0x4E PUSH15 0xCB2DB28818649A5EDB0F6ED5E1EEF PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1319:808:73:-:0;;;;;;;;;;;;;-1:-1:-1;;1319:808:73;;;;-1:-1:-1;;;;;1319:808:73;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1319:808:73;;;;;;;;;;;922:4:45;;1347:46:33;;943:28:43;939:79;;1028:14;;-1:-1:-1;1319:808:73;;;;;;;;;1347:46:33;1319:808:73;;;;;1028:14:43;1319:808:73;;;;;;;;;;;;;;;;939:79:43;994:13;;;-1:-1:-1;994:13:43;;-1:-1:-1;994:13:43;1319:808:73;-1:-1:-1;1319:808:73;;;;;;-1:-1:-1;1319:808:73;;;;;-1:-1:-1;1319:808:73"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1672,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IWeightedPool":{"entryPoint":1409,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1444,"id":null,"parameterSlots":2,"returnSlots":0},"fun_getActionId":{"entryPoint":1554,"id":4148,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4088":[{"length":32,"start":1597}],"6692":[{"length":32,"start":281},{"length":32,"start":1080},{"length":32,"start":1225}]},"linkReferences":{},"object":"6080604081815260049081361015610015575f80fd5b5f35928360e01c90816310d3d22e1461053d57508063851c1bb3146104ed5780638d928af81461049d578063aaabadc5146103e45763cd1d977614610058575f80fd5b3461033c578060031936011261033c57610070610581565b602480359467ffffffffffffffff9485871161033c573660238801121561033c5786810135958087116103b9578660051b926020988751986100b48b87018b6105a4565b89528989018681968301019136831161033c578701905b82821061038d575050507fffffffff000000000000000000000000000000000000000000000000000000006101009116610612565b73ffffffffffffffffffffffffffffffffffffffff95867f000000000000000000000000000000000000000000000000000000000000000016918851907faaabadc50000000000000000000000000000000000000000000000000000000082528b828781875afa91821561038357918c918a935f92610351575b506064908c5194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528b840152338d840152306044840152165afa908115610347575f9161030d575b50156102e6575f54938851966127519182890195898710908711176102bc57505086959493929188916106b58839608084019284521698898b8401526080898401525180915260a0820193905f5b8b8282106102a357505050506060015203905ff08015610299571691805f5260018452815f20837fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557ffe0fe762010efd636b9d44c1b529d2343a72d14538bd28a5a873e29e5e8956f2825f5481519086825287820152a251908152f35b82513d5f823e3d90fd5b83518a1687528897509586019590920191600101610216565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b837f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508a81813d8311610340575b61032481836105a4565b8101031261033c5751801515810361033c575f6101c8565b5f80fd5b503d61031a565b89513d5f823e3d90fd5b606491925061037590843d861161037c575b61036d81836105a4565b810190610688565b919061017a565b503d610363565b8a513d5f823e3d90fd5b813573ffffffffffffffffffffffffffffffffffffffff8116810361033c578152908b01908b016100cb565b836041837f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50903461033c575f60031936011261033c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561049357926020935f93610474575b505191168152f35b61048c919350843d861161037c5761036d81836105a4565b918461046c565b83513d5f823e3d90fd5b503461033c575f60031936011261033c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50903461033c57602060031936011261033c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361033c57610536602092610612565b9051908152f35b90503461033c57602060031936011261033c5760209173ffffffffffffffffffffffffffffffffffffffff9081610572610581565b165f52600184525f2054168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176105e55760405251902090565b9081602091031261033c575173ffffffffffffffffffffffffffffffffffffffff8116810361033c579056fe6104006040908082523461066757612751803803809161001f82856107bf565b833981016080828203126106675781516001600160a01b0392838216918281036106675760209586830151968688169788810361066757848301516001600160401b03919082811161066757860194601f96898888011215610667578651996100878b6107f6565b976100948851998a6107bf565b8b8952868901908760059d8e1b820101928311610667578701905b8282106107a7575050506060015160c05260805260a05282519863ca4f280360e01b8a525f8a60248160049a858c8301525afa998a15610710575f9a61071a575b50985f8798999a85519889809263f89f27ed60e01b82525afa968715610710575f97610688575b5051948560e052875f8b60a051168651928380926395d89b4160e01b82525afa90811561067e579084915f916105eb575b5060246101799187519381859251918291018984015e8101630bd554d160e21b88820152038b8101845201826107bf565b80519283116105d8575f54936001948581811c911680156105ce575b828210146105bb57838111610579575b508092841160011461051757509282939183925f9461050c575b50501b915f199060031b1c1916175f555b815183036104fe57866101e28361080d565b5116916102009283526101f48561080d565b5197610100988952610210816102098461080d565b511661089f565b956103009687526007826102238561082e565b5116966102209788526102358361082e565b519a6101209b8c5261024a856102098861082e565b9a6103209b8c52600283116104ca575b60038311610496575b8211610462575b811161042e575b600681116103fa575b116103c4575b5050505194611df09687610961883960805187818161012601526108ab015260a0518781816101000152818161068e0152610850015260c05187610558015260e05187818161027a0152818161036f015281816106400152818161080e0152610b6101525186610db501525185610de001526101405185610e1401526101605185610e4801526101805185610e7c01526101a05185610eb001526101c05185610ee701526101e05185610f1a0152518461109c015251836110c901526102405183611100015261026051836111370152610280518361116e01526102a051836111a501526102c051836111e001526102e051836112170152518261124d01525181611278015261034051816112ac015261036051816112e00152610380518161131401526103a0518161134801526103c0518161137f01526103e051816113b20152f35b826103e461020992846103d96103ee9761088e565b51166102e05261088e565b516101e05261088e565b6103e0525f8080610280565b836104048661087e565b51166102c0526104138361087e565b516101c052610425846102098761087e565b6103c05261027a565b836104388661086e565b51166102a0526104478361086e565b516101a052610459846102098761086e565b6103a052610271565b8461046c8761085e565b51166102805261047b8461085e565b516101805261048d856102098861085e565b6103805261026a565b856104a08861084e565b5116610260526104af8561084e565b51610160526104c1866102098961084e565b61036052610263565b856104d48861083e565b5116610240526104e38561083e565b51610140526104f5866102098961083e565b6103405261025a565b8463aaad13f760e01b5f525ffd5b015192505f806101bf565b919083601f1981165f8052845f20945f905b8883831061055f5750505010610547575b505050811b015f556101d0565b01515f1960f88460031b161c191690555f808061053a565b858701518855909601959485019487935090810190610529565b5f8052815f20848d818801901c8201928488106105b2575b018d1c019086905b8281106105a75750506101a5565b5f8155018690610599565b92508192610591565b60228b634e487b7160e01b5f525260245ffd5b90607f1690610195565b604189634e487b7160e01b5f525260245ffd5b9150503d805f833e6105fd81836107bf565b81019084818303126106675780519084821161066757018183820112156106675780519084821161066b5786519261063d838601601f19168801856107bf565b8284528683830101116106675785925f84846101799582602496018386015e830101529150610148565b5f80fd5b60418b634e487b7160e01b5f525260245ffd5b85513d5f823e3d90fd5b9096503d805f833e61069a81836107bf565b8101908381830312610667578051908382116106675701908087830112156106675781516106c7816107f6565b926106d4875194856107bf565b81845285808501928d1b8201019283116106675785809101915b8383106107005750505050955f610117565b82518152918101918691016106ee565b84513d5f823e3d90fd5b99503d805f8c3e61072b818c6107bf565b8a019983818c03126106675780519083821161066757019980878c011215610667578a51610758816107f6565b9b858088519e8f9061076a90826107bf565b84815201928c1b820101928311610667578501905b82821061078f575050505f6100f0565b81518c8116810361066757815290850190850161077f565b8151808f1681036106675781529087019087016100af565b601f909101601f19168101906001600160401b038211908210176107e257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116107e25760051b60200190565b80511561081a5760200190565b634e487b7160e01b5f52603260045260245ffd5b80516001101561081a5760400190565b80516002101561081a5760600190565b80516003101561081a5760800190565b80516004101561081a5760a00190565b80516005101561081a5760c00190565b80516006101561081a5760e00190565b80516007101561081a576101000190565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015610955575f90610918575b60ff9150166012811161090957601203601281116108f557604d81116108f557600a0a90565b634e487b7160e01b5f52601160045260245ffd5b636a78e98160e11b5f5260045ffd5b506020813d60201161094d575b81610932602093836107bf565b81010312610667575160ff811681036106675760ff906108cf565b3d9150610925565b6040513d5f823e3d90fdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146106645750806322acb86714610626578063313ce5671461060b57806347bcac3b1461057b57806354fd4d50146105415780637284e416146103ed5780637fe955d4146103595780639a6fc8f514610312578063af1296d3146102b5578063cd2c9e70146102605763feaf968c14610098575f80fd5b3461024a575f60031936011261024a576100bc60246100b5610b5f565b929061080c565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610256575f9261021e575b5081156101f857670de0b6b3a7640000948581029581870414901517156101cc57506101b08460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026113da565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d60201161024e575b8161023a602093836106e5565b8101031261024a5751905f610156565b5f80fd5b3d915061022d565b84513d5f823e3d90fd5b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000611241565b90519182916020835260208301906106b2565b0390f35b503461024a575f60031936011261024a576102ce610b5f565b91805191818301918352805180925260608301916020809201915f5b8281106102fe578580868960208301520390f35b8351855293810193928101926001016102ea565b50903461024a57602060031936011261024a573569ffffffffffffffffffff81160361024a57805f60a09251918183528160208401528201525f60608201525f6080820152f35b503461024a575f60031936011261024a576103937f000000000000000000000000000000000000000000000000000000000000000061104c565b908051918291602090602080850191818652845180935285019301915f5b8281106103c057505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016103b1565b503461024a575f60031936011261024a5780515f5f549060018260011c9060018416938415610537575b602097888410861461050b57509187918694938286528386019690815f146104d1575060011461047b575b50505091610457601f92601f199403856106e5565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106104bb575050508201018582601f19610442565b80548885018601528795509284019281016104a4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610442565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610417565b503461024a575f60031936011261024a57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461024a5760208060031936011261024a5782359267ffffffffffffffff841161024a573660238501121561024a57830135926105b884610735565b936105c5845195866106e5565b8085526024602086019160051b8301019136831161024a57602401905b8282106105fc576020856105f58861080c565b9051908152f35b813581529083019083016105e2565b503461024a575f60031936011261024a576020905160128152f35b503461024a575f60031936011261024a576102b19061029e7f0000000000000000000000000000000000000000000000000000000000000000610da9565b3461024a575f60031936011261024a5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106106d1575050505090565b8351855293810193928101926001016106c3565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116107085760051b60200190565b80511561075a5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80516001101561075a5760400190565b80516002101561075a5760600190565b80516003101561075a5760800190565b80516004101561075a5760a00190565b80516005101561075a5760c00190565b80516006101561075a5760e00190565b80516007101561075a576101000190565b805182101561075a5760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061083782610da9565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b3e575f91610aac575b5060209061091d92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906106b2565b5f602483015203915afa968715610aa357505f96610a6f575b5093929190670de0b6b3a7640000945f945b84861061096c57505050505050670de0b6b3a76400009161096891610f4a565b0490565b90919293949561097c87836107f8565b515f8112610a455761098e88856107f8565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610a1a5780156109ef576001926109dc670de0b6b3a7640000936109e2936109d48d8a6107f8565b519104610f8a565b90610f4a565b0496019493929190610948565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610a9b575b81610a8b602093836106e5565b8101031261024a5751945f610936565b3d9150610a7e565b513d5f823e3d90fd5b90503d805f833e610abd81836106e5565b810190602090818184031261024a5780519067ffffffffffffffff821161024a57019180601f8401121561024a578251610af681610735565b93610b038c5195866106e5565b818552838086019260051b82010192831161024a578301905b828210610b2f575050505061091d6108db565b81518152908301908301610b1c565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361024a57565b7f000000000000000000000000000000000000000000000000000000000000000090610b8a8261104c565b90610b9483611241565b91610b9e84610735565b604094610bae60405192836106e5565b808252610bba81610735565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610bfe5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610c248a846107f8565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610d6e575f925f94610d16575b5050610c7f610c798d886107f8565b516113da565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610cea5781840514901517156101cc57509060019291610ccb8c8b6107f8565b5280821015610ce357505b9801959493929190610bee565b9050610cd6565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610d67575b610d2f81836106e5565b8101031261024a57610d4081610b48565b9187820151918781015192610d5c608060608401519301610b48565b94509250925f610c6a565b503d610d25565b87513d5f823e3d90fd5b90610d8282610735565b610d8f60405191826106e5565b828152601f19610d9f8294610735565b0190602036910137565b610db281610d78565b907f0000000000000000000000000000000000000000000000000000000000000000610ddd8361074d565b527f0000000000000000000000000000000000000000000000000000000000000000610e0883610787565b526002811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e3c83610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610e70836107a7565b526004811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ea4836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000610ed8836107c7565b526006811115610f46576007907f0000000000000000000000000000000000000000000000000000000000000000610f0f846107d7565b5211610f185790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b5290565b5090565b81810292918115918404141715610f5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a764000091808303610fa15750905090565b8290671bc16d674ec800008103610fbe5750508061096891610f4a565b673782dace9d9000008103610fe25750610fdb8261096893610f4a565b0480610f4a565b9050610fed91611480565b612710808202908282041482151715610f5d5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff938483010401901515029060018201808311610f5d57811015611047575050505f90565b030190565b61105581610735565b9061106360405192836106e5565b808252601f1961107282610735565b013660208401376110828261074d565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526110c783610787565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561123c576110fe83610797565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561123c57611135836107a7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561123c5761116c836107b7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561123c576111a3836107c7565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561123c576007906111dd846107d7565b837f00000000000000000000000000000000000000000000000000000000000000001690521161120b575090565b611214826107e7565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61124a81610d78565b907f00000000000000000000000000000000000000000000000000000000000000006112758361074d565b527f00000000000000000000000000000000000000000000000000000000000000006112a083610787565b526002811115610f46577f00000000000000000000000000000000000000000000000000000000000000006112d483610797565b526003811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611308836107a7565b526004811115610f46577f000000000000000000000000000000000000000000000000000000000000000061133c836107b7565b526005811115610f46577f0000000000000000000000000000000000000000000000000000000000000000611370836107c7565b526006811115610f46576007907f00000000000000000000000000000000000000000000000000000000000000006113a7846107d7565b52116113b05790565b7f0000000000000000000000000000000000000000000000000000000000000000610f42826107e7565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116114045790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611449576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611449570590565b908015611dac578115611da6578160ff1c611d7e57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611d565781670c7d713b49da00001280611d45575b156119e257670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611519908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611476565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806119cf575b156119a757819082121580611994575b1561196c575f915f811261195d575b506064906806f05b59d3b200000081126118fa577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156118c1575b6856bc75e2d631000000811215611887575b682b5e3af16b1880000081121561184f575b6815af1d78b58c400000811215611817575b680ad78ebc5ac62000008112156117e0575b828112156117a9575b6802b5e3af16b1880000811215611772575b68015af1d78b58c4000081121561173b575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611738576117389061142f565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906116b9565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906116a7565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611695565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061168c565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061167a565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611668565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611656565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611644565b6803782dace9d9000000811261194a577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261162f565b68056bc75e2d631000008260019261162f565b600192505f03905060646115d3565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115c4565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156115b4565b81670de0b6b3a7640000925f91848112611d2f575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d04575b73011798004d755d3c8bc8e03204cf44619e000000821215611ce3575b820290808302906e01855144814a7ff805980ff00840009081831215611cc0575b50506b02df0ab5a80a22c61ab5a70080821215611ca0575b50693f1fce3da636ea5cf85080821215611c80575b50690127fa27722cc06cc5e280821215611c60575b5068280e60114edb805d0380821215611c40575b50680ebc5fb4174612111080821215611c29575b506808f00f760a4b2db55d80821215611c09575b506806f5f177578893793780821215611be9575b506806248f33704b28660380821215611bca575b506805c548670b9510e7ac80821215611bab575b50611b5868056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611476565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611ba6575f035b02611588565b611ba0565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b1c565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b08565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611af4565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611ae0565b68056bc75e2d63100000809202059101905f611acc565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611ab8565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611aa4565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611a8f565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611a7a565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611a62565b906b1425982cf597cd205cef73806803782dace9d900000091059101611a41565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a24565b9050611d3b915061142f565b60019060646119f7565b50670f43fc2c04ee000082126114c6565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220659c979dfe41d02b29882b7d46ec0a2e92eadb9c4641e40f6c89f036fb5a967b64736f6c634300081b0033a26469706673582212208d8af8eb1f4e81bf0d263eaa3254924e6e0cb2db28818649a5edb0f6ed5e1eef64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP3 DUP4 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x10D3D22E EQ PUSH2 0x53D JUMPI POP DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x49D JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x3E4 JUMPI PUSH4 0xCD1D9776 EQ PUSH2 0x58 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x33C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH2 0x70 PUSH2 0x581 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP8 GT PUSH2 0x33C JUMPI CALLDATASIZE PUSH1 0x23 DUP9 ADD SLT ISZERO PUSH2 0x33C JUMPI DUP7 DUP2 ADD CALLDATALOAD SWAP6 DUP1 DUP8 GT PUSH2 0x3B9 JUMPI DUP7 PUSH1 0x5 SHL SWAP3 PUSH1 0x20 SWAP9 DUP8 MLOAD SWAP9 PUSH2 0xB4 DUP12 DUP8 ADD DUP12 PUSH2 0x5A4 JUMP JUMPDEST DUP10 MSTORE DUP10 DUP10 ADD DUP7 DUP2 SWAP7 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x33C JUMPI DUP8 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x38D JUMPI POP POP POP PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x100 SWAP2 AND PUSH2 0x612 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP2 DUP9 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP12 DUP3 DUP8 DUP2 DUP8 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 DUP13 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x351 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP13 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP12 DUP5 ADD MSTORE CALLER DUP14 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x347 JUMPI PUSH0 SWAP2 PUSH2 0x30D JUMPI JUMPDEST POP ISZERO PUSH2 0x2E6 JUMPI PUSH0 SLOAD SWAP4 DUP9 MLOAD SWAP7 PUSH2 0x2751 SWAP2 DUP3 DUP10 ADD SWAP6 DUP10 DUP8 LT SWAP1 DUP8 GT OR PUSH2 0x2BC JUMPI POP POP DUP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6B5 DUP9 CODECOPY PUSH1 0x80 DUP5 ADD SWAP3 DUP5 MSTORE AND SWAP9 DUP10 DUP12 DUP5 ADD MSTORE PUSH1 0x80 DUP10 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD SWAP4 SWAP1 PUSH0 JUMPDEST DUP12 DUP3 DUP3 LT PUSH2 0x2A3 JUMPI POP POP POP POP PUSH1 0x60 ADD MSTORE SUB SWAP1 PUSH0 CREATE DUP1 ISZERO PUSH2 0x299 JUMPI AND SWAP2 DUP1 PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xFE0FE762010EFD636B9D44C1B529D2343A72D14538BD28A5A873E29E5E8956F2 DUP3 PUSH0 SLOAD DUP2 MLOAD SWAP1 DUP7 DUP3 MSTORE DUP8 DUP3 ADD MSTORE LOG2 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 MLOAD DUP11 AND DUP8 MSTORE DUP9 SWAP8 POP SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x216 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP4 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x340 JUMPI JUMPDEST PUSH2 0x324 DUP2 DUP4 PUSH2 0x5A4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x33C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x33C JUMPI PUSH0 PUSH2 0x1C8 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x31A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x375 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x37C JUMPI JUMPDEST PUSH2 0x36D DUP2 DUP4 PUSH2 0x5A4 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x688 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x17A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x363 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x33C JUMPI DUP2 MSTORE SWAP1 DUP12 ADD SWAP1 DUP12 ADD PUSH2 0xCB JUMP JUMPDEST DUP4 PUSH1 0x41 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x33C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x493 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x474 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x48C SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x37C JUMPI PUSH2 0x36D DUP2 DUP4 PUSH2 0x5A4 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x46C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x33C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x33C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x33C JUMPI PUSH2 0x536 PUSH1 0x20 SWAP3 PUSH2 0x612 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x33C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x33C JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0x572 PUSH2 0x581 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x33C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5E5 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5E5 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x33C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x33C JUMPI SWAP1 JUMP INVALID PUSH2 0x400 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x667 JUMPI PUSH2 0x2751 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x80 DUP3 DUP3 SUB SLT PUSH2 0x667 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP3 AND SWAP2 DUP3 DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0x20 SWAP6 DUP7 DUP4 ADD MLOAD SWAP7 DUP7 DUP9 AND SWAP8 DUP9 DUP2 SUB PUSH2 0x667 JUMPI DUP5 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x667 JUMPI DUP7 ADD SWAP5 PUSH1 0x1F SWAP7 DUP10 DUP9 DUP9 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP7 MLOAD SWAP10 PUSH2 0x87 DUP12 PUSH2 0x7F6 JUMP JUMPDEST SWAP8 PUSH2 0x94 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x7BF JUMP JUMPDEST DUP12 DUP10 MSTORE DUP7 DUP10 ADD SWAP1 DUP8 PUSH1 0x5 SWAP14 DUP15 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP8 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7A7 JUMPI POP POP POP PUSH1 0x60 ADD MLOAD PUSH1 0xC0 MSTORE PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP3 MLOAD SWAP9 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP11 MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x4 SWAP11 DUP6 DUP13 DUP4 ADD MSTORE GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP11 PUSH2 0x71A JUMPI JUMPDEST POP SWAP9 PUSH0 DUP8 SWAP9 SWAP10 SWAP11 DUP6 MLOAD SWAP9 DUP10 DUP1 SWAP3 PUSH4 0xF89F27ED PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP8 PUSH2 0x688 JUMPI JUMPDEST POP MLOAD SWAP5 DUP6 PUSH1 0xE0 MSTORE DUP8 PUSH0 DUP12 PUSH1 0xA0 MLOAD AND DUP7 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67E JUMPI SWAP1 DUP5 SWAP2 PUSH0 SWAP2 PUSH2 0x5EB JUMPI JUMPDEST POP PUSH1 0x24 PUSH2 0x179 SWAP2 DUP8 MLOAD SWAP4 DUP2 DUP6 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP10 DUP5 ADD MCOPY DUP2 ADD PUSH4 0xBD554D1 PUSH1 0xE2 SHL DUP9 DUP3 ADD MSTORE SUB DUP12 DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP1 MLOAD SWAP3 DUP4 GT PUSH2 0x5D8 JUMPI PUSH0 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP6 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x5CE JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x5BB JUMPI DUP4 DUP2 GT PUSH2 0x579 JUMPI JUMPDEST POP DUP1 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x517 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x50C JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP2 MLOAD DUP4 SUB PUSH2 0x4FE JUMPI DUP7 PUSH2 0x1E2 DUP4 PUSH2 0x80D JUMP JUMPDEST MLOAD AND SWAP2 PUSH2 0x200 SWAP3 DUP4 MSTORE PUSH2 0x1F4 DUP6 PUSH2 0x80D JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x100 SWAP9 DUP10 MSTORE PUSH2 0x210 DUP2 PUSH2 0x209 DUP5 PUSH2 0x80D JUMP JUMPDEST MLOAD AND PUSH2 0x89F JUMP JUMPDEST SWAP6 PUSH2 0x300 SWAP7 DUP8 MSTORE PUSH1 0x7 DUP3 PUSH2 0x223 DUP6 PUSH2 0x82E JUMP JUMPDEST MLOAD AND SWAP7 PUSH2 0x220 SWAP8 DUP9 MSTORE PUSH2 0x235 DUP4 PUSH2 0x82E JUMP JUMPDEST MLOAD SWAP11 PUSH2 0x120 SWAP12 DUP13 MSTORE PUSH2 0x24A DUP6 PUSH2 0x209 DUP9 PUSH2 0x82E JUMP JUMPDEST SWAP11 PUSH2 0x320 SWAP12 DUP13 MSTORE PUSH1 0x2 DUP4 GT PUSH2 0x4CA JUMPI JUMPDEST PUSH1 0x3 DUP4 GT PUSH2 0x496 JUMPI JUMPDEST DUP3 GT PUSH2 0x462 JUMPI JUMPDEST DUP2 GT PUSH2 0x42E JUMPI JUMPDEST PUSH1 0x6 DUP2 GT PUSH2 0x3FA JUMPI JUMPDEST GT PUSH2 0x3C4 JUMPI JUMPDEST POP POP POP MLOAD SWAP5 PUSH2 0x1DF0 SWAP7 DUP8 PUSH2 0x961 DUP9 CODECOPY PUSH1 0x80 MLOAD DUP8 DUP2 DUP2 PUSH2 0x126 ADD MSTORE PUSH2 0x8AB ADD MSTORE PUSH1 0xA0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x100 ADD MSTORE DUP2 DUP2 PUSH2 0x68E ADD MSTORE PUSH2 0x850 ADD MSTORE PUSH1 0xC0 MLOAD DUP8 PUSH2 0x558 ADD MSTORE PUSH1 0xE0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x27A ADD MSTORE DUP2 DUP2 PUSH2 0x36F ADD MSTORE DUP2 DUP2 PUSH2 0x640 ADD MSTORE DUP2 DUP2 PUSH2 0x80E ADD MSTORE PUSH2 0xB61 ADD MSTORE MLOAD DUP7 PUSH2 0xDB5 ADD MSTORE MLOAD DUP6 PUSH2 0xDE0 ADD MSTORE PUSH2 0x140 MLOAD DUP6 PUSH2 0xE14 ADD MSTORE PUSH2 0x160 MLOAD DUP6 PUSH2 0xE48 ADD MSTORE PUSH2 0x180 MLOAD DUP6 PUSH2 0xE7C ADD MSTORE PUSH2 0x1A0 MLOAD DUP6 PUSH2 0xEB0 ADD MSTORE PUSH2 0x1C0 MLOAD DUP6 PUSH2 0xEE7 ADD MSTORE PUSH2 0x1E0 MLOAD DUP6 PUSH2 0xF1A ADD MSTORE MLOAD DUP5 PUSH2 0x109C ADD MSTORE MLOAD DUP4 PUSH2 0x10C9 ADD MSTORE PUSH2 0x240 MLOAD DUP4 PUSH2 0x1100 ADD MSTORE PUSH2 0x260 MLOAD DUP4 PUSH2 0x1137 ADD MSTORE PUSH2 0x280 MLOAD DUP4 PUSH2 0x116E ADD MSTORE PUSH2 0x2A0 MLOAD DUP4 PUSH2 0x11A5 ADD MSTORE PUSH2 0x2C0 MLOAD DUP4 PUSH2 0x11E0 ADD MSTORE PUSH2 0x2E0 MLOAD DUP4 PUSH2 0x1217 ADD MSTORE MLOAD DUP3 PUSH2 0x124D ADD MSTORE MLOAD DUP2 PUSH2 0x1278 ADD MSTORE PUSH2 0x340 MLOAD DUP2 PUSH2 0x12AC ADD MSTORE PUSH2 0x360 MLOAD DUP2 PUSH2 0x12E0 ADD MSTORE PUSH2 0x380 MLOAD DUP2 PUSH2 0x1314 ADD MSTORE PUSH2 0x3A0 MLOAD DUP2 PUSH2 0x1348 ADD MSTORE PUSH2 0x3C0 MLOAD DUP2 PUSH2 0x137F ADD MSTORE PUSH2 0x3E0 MLOAD DUP2 PUSH2 0x13B2 ADD MSTORE RETURN JUMPDEST DUP3 PUSH2 0x3E4 PUSH2 0x209 SWAP3 DUP5 PUSH2 0x3D9 PUSH2 0x3EE SWAP8 PUSH2 0x88E JUMP JUMPDEST MLOAD AND PUSH2 0x2E0 MSTORE PUSH2 0x88E JUMP JUMPDEST MLOAD PUSH2 0x1E0 MSTORE PUSH2 0x88E JUMP JUMPDEST PUSH2 0x3E0 MSTORE PUSH0 DUP1 DUP1 PUSH2 0x280 JUMP JUMPDEST DUP4 PUSH2 0x404 DUP7 PUSH2 0x87E JUMP JUMPDEST MLOAD AND PUSH2 0x2C0 MSTORE PUSH2 0x413 DUP4 PUSH2 0x87E JUMP JUMPDEST MLOAD PUSH2 0x1C0 MSTORE PUSH2 0x425 DUP5 PUSH2 0x209 DUP8 PUSH2 0x87E JUMP JUMPDEST PUSH2 0x3C0 MSTORE PUSH2 0x27A JUMP JUMPDEST DUP4 PUSH2 0x438 DUP7 PUSH2 0x86E JUMP JUMPDEST MLOAD AND PUSH2 0x2A0 MSTORE PUSH2 0x447 DUP4 PUSH2 0x86E JUMP JUMPDEST MLOAD PUSH2 0x1A0 MSTORE PUSH2 0x459 DUP5 PUSH2 0x209 DUP8 PUSH2 0x86E JUMP JUMPDEST PUSH2 0x3A0 MSTORE PUSH2 0x271 JUMP JUMPDEST DUP5 PUSH2 0x46C DUP8 PUSH2 0x85E JUMP JUMPDEST MLOAD AND PUSH2 0x280 MSTORE PUSH2 0x47B DUP5 PUSH2 0x85E JUMP JUMPDEST MLOAD PUSH2 0x180 MSTORE PUSH2 0x48D DUP6 PUSH2 0x209 DUP9 PUSH2 0x85E JUMP JUMPDEST PUSH2 0x380 MSTORE PUSH2 0x26A JUMP JUMPDEST DUP6 PUSH2 0x4A0 DUP9 PUSH2 0x84E JUMP JUMPDEST MLOAD AND PUSH2 0x260 MSTORE PUSH2 0x4AF DUP6 PUSH2 0x84E JUMP JUMPDEST MLOAD PUSH2 0x160 MSTORE PUSH2 0x4C1 DUP7 PUSH2 0x209 DUP10 PUSH2 0x84E JUMP JUMPDEST PUSH2 0x360 MSTORE PUSH2 0x263 JUMP JUMPDEST DUP6 PUSH2 0x4D4 DUP9 PUSH2 0x83E JUMP JUMPDEST MLOAD AND PUSH2 0x240 MSTORE PUSH2 0x4E3 DUP6 PUSH2 0x83E JUMP JUMPDEST MLOAD PUSH2 0x140 MSTORE PUSH2 0x4F5 DUP7 PUSH2 0x209 DUP10 PUSH2 0x83E JUMP JUMPDEST PUSH2 0x340 MSTORE PUSH2 0x25A JUMP JUMPDEST DUP5 PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x1BF JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x55F JUMPI POP POP POP LT PUSH2 0x547 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x1D0 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x53A JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x529 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP14 DUP2 DUP9 ADD SWAP1 SHR DUP3 ADD SWAP3 DUP5 DUP9 LT PUSH2 0x5B2 JUMPI JUMPDEST ADD DUP14 SHR ADD SWAP1 DUP7 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x5A7 JUMPI POP POP PUSH2 0x1A5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP7 SWAP1 PUSH2 0x599 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x591 JUMP JUMPDEST PUSH1 0x22 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x195 JUMP JUMPDEST PUSH1 0x41 DUP10 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5FD DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP5 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x667 JUMPI ADD DUP2 DUP4 DUP3 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x66B JUMPI DUP7 MLOAD SWAP3 PUSH2 0x63D DUP4 DUP7 ADD PUSH1 0x1F NOT AND DUP9 ADD DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP3 DUP5 MSTORE DUP7 DUP4 DUP4 ADD ADD GT PUSH2 0x667 JUMPI DUP6 SWAP3 PUSH0 DUP5 DUP5 PUSH2 0x179 SWAP6 DUP3 PUSH1 0x24 SWAP7 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP2 POP PUSH2 0x148 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x69A DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP1 DUP1 DUP8 DUP4 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP2 MLOAD PUSH2 0x6C7 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP3 PUSH2 0x6D4 DUP8 MLOAD SWAP5 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 DUP14 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 DUP1 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x700 JUMPI POP POP POP POP SWAP6 PUSH0 PUSH2 0x117 JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP7 SWAP2 ADD PUSH2 0x6EE JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP RETURNDATASIZE DUP1 PUSH0 DUP13 RETURNDATACOPY PUSH2 0x72B DUP2 DUP13 PUSH2 0x7BF JUMP JUMPDEST DUP11 ADD SWAP10 DUP4 DUP2 DUP13 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP10 DUP1 DUP8 DUP13 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP11 MLOAD PUSH2 0x758 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP12 DUP6 DUP1 DUP9 MLOAD SWAP15 DUP16 SWAP1 PUSH2 0x76A SWAP1 DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 DUP13 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x78F JUMPI POP POP POP PUSH0 PUSH2 0xF0 JUMP JUMPDEST DUP2 MLOAD DUP13 DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST DUP2 MLOAD DUP1 DUP16 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x7E2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x7E2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x81A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x81A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 PUSH1 0x20 SWAP1 DUP3 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x955 JUMPI PUSH0 SWAP1 PUSH2 0x918 JUMPI JUMPDEST PUSH1 0xFF SWAP2 POP AND PUSH1 0x12 DUP2 GT PUSH2 0x909 JUMPI PUSH1 0x12 SUB PUSH1 0x12 DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0x4D DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x6A78E981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x94D JUMPI JUMPDEST DUP2 PUSH2 0x932 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x667 JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0xFF SWAP1 PUSH2 0x8CF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x925 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16F0115B EQ PUSH2 0x664 JUMPI POP DUP1 PUSH4 0x22ACB867 EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x60B JUMPI DUP1 PUSH4 0x47BCAC3B EQ PUSH2 0x57B JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x541 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x7FE955D4 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x312 JUMPI DUP1 PUSH4 0xAF1296D3 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xCD2C9E70 EQ PUSH2 0x260 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0xBC PUSH1 0x24 PUSH2 0xB5 PUSH2 0xB5F JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x80C JUMP JUMPDEST SWAP4 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP1 PUSH32 0x0 AND DUP7 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x256 JUMPI PUSH0 SWAP3 PUSH2 0x21E JUMPI JUMPDEST POP DUP2 ISZERO PUSH2 0x1F8 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP PUSH2 0x1B0 DUP5 PUSH1 0x1 PUSH0 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 SWAP9 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x13DA JUMP JUMPDEST SWAP3 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24E JUMPI JUMPDEST DUP2 PUSH2 0x23A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x156 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x22D JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0x1241 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2CE PUSH2 0xB5F JUMP JUMPDEST SWAP2 DUP1 MLOAD SWAP2 DUP2 DUP4 ADD SWAP2 DUP4 MSTORE DUP1 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD SWAP2 PUSH1 0x20 DUP1 SWAP3 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FE JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2EA JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0x24A JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x393 PUSH32 0x0 PUSH2 0x104C JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3C0 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3B1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x537 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x50B JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x4D1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x47B JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x457 PUSH1 0x1F SWAP3 PUSH1 0x1F NOT SWAP5 SUB DUP6 PUSH2 0x6E5 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x4BB JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x4A4 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x442 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x417 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI DUP3 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x24A JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP4 ADD CALLDATALOAD SWAP3 PUSH2 0x5B8 DUP5 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0x5C5 DUP5 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x24A JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5FC JUMPI PUSH1 0x20 DUP6 PUSH2 0x5F5 DUP9 PUSH2 0x80C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5E2 JUMP JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH2 0x2B1 SWAP1 PUSH2 0x29E PUSH32 0x0 PUSH2 0xDA9 JUMP JUMPDEST CALLVALUE PUSH2 0x24A JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x24A JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6D1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x6C3 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x708 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x75A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x75A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x837 DUP3 PUSH2 0xDA9 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x40 SWAP5 DUP6 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 SWAP3 DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP2 SWAP9 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB3E JUMPI PUSH0 SWAP2 PUSH2 0xAAC JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH2 0x91D SWAP3 DUP10 MLOAD DUP1 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x6B2 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP2 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xAA3 JUMPI POP PUSH0 SWAP7 PUSH2 0xA6F JUMPI JUMPDEST POP SWAP4 SWAP3 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH0 SWAP5 JUMPDEST DUP5 DUP7 LT PUSH2 0x96C JUMPI POP POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x97C DUP8 DUP4 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH0 DUP2 SLT PUSH2 0xA45 JUMPI PUSH2 0x98E DUP9 DUP6 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH8 0xDE0B6B3A7640000 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xA1A JUMPI DUP1 ISZERO PUSH2 0x9EF JUMPI PUSH1 0x1 SWAP3 PUSH2 0x9DC PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x9E2 SWAP4 PUSH2 0x9D4 DUP14 DUP11 PUSH2 0x7F8 JUMP JUMPDEST MLOAD SWAP2 DIV PUSH2 0xF8A JUMP JUMPDEST SWAP1 PUSH2 0xF4A JUMP JUMPDEST DIV SWAP7 ADD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x948 JUMP JUMPDEST DUP7 PUSH1 0x12 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 SWAP1 DUP6 PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP6 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA9B JUMPI JUMPDEST DUP2 PUSH2 0xA8B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI MLOAD SWAP5 PUSH0 PUSH2 0x936 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA7E JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xABD DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x24A JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x24A JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x24A JUMPI DUP3 MLOAD PUSH2 0xAF6 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP4 PUSH2 0xB03 DUP13 MLOAD SWAP6 DUP7 PUSH2 0x6E5 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x24A JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xB2F JUMPI POP POP POP POP PUSH2 0x91D PUSH2 0x8DB JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB1C JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x24A JUMPI JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0xB8A DUP3 PUSH2 0x104C JUMP JUMPDEST SWAP1 PUSH2 0xB94 DUP4 PUSH2 0x1241 JUMP JUMPDEST SWAP2 PUSH2 0xB9E DUP5 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x40 SWAP5 PUSH2 0xBAE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0xBBA DUP2 PUSH2 0x735 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP6 JUMPDEST DUP5 DUP8 LT PUSH2 0xBFE JUMPI POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC24 DUP11 DUP5 PUSH2 0x7F8 JUMP JUMPDEST MLOAD AND DUP5 MLOAD DUP1 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0xA0 SWAP3 DUP4 SWAP2 PUSH1 0x4 SWAP4 DUP5 SWAP2 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xD6E JUMPI PUSH0 SWAP3 PUSH0 SWAP5 PUSH2 0xD16 JUMPI JUMPDEST POP POP PUSH2 0xC7F PUSH2 0xC79 DUP14 DUP9 PUSH2 0x7F8 JUMP JUMPDEST MLOAD PUSH2 0x13DA JUMP JUMPDEST SWAP2 DUP3 DUP2 MUL SWAP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH0 DUP4 SLT AND PUSH2 0xCEA JUMPI DUP2 DUP5 SDIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1CC JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH2 0xCCB DUP13 DUP12 PUSH2 0x7F8 JUMP JUMPDEST MSTORE DUP1 DUP3 LT ISZERO PUSH2 0xCE3 JUMPI POP JUMPDEST SWAP9 ADD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xBEE JUMP JUMPDEST SWAP1 POP PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x11 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 SWAP5 POP DUP2 SWAP4 POP RETURNDATASIZE DUP4 GT PUSH2 0xD67 JUMPI JUMPDEST PUSH2 0xD2F DUP2 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x24A JUMPI PUSH2 0xD40 DUP2 PUSH2 0xB48 JUMP JUMPDEST SWAP2 DUP8 DUP3 ADD MLOAD SWAP2 DUP8 DUP2 ADD MLOAD SWAP3 PUSH2 0xD5C PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0xB48 JUMP JUMPDEST SWAP5 POP SWAP3 POP SWAP3 PUSH0 PUSH2 0xC6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD25 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0xD82 DUP3 PUSH2 0x735 JUMP JUMPDEST PUSH2 0xD8F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x6E5 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xD9F DUP3 SWAP5 PUSH2 0x735 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH2 0xDB2 DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xDDD DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0xE08 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE3C DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xE70 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xEA4 DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0xED8 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0xF0F DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0xF18 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0xF5D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0xFA1 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0xFBE JUMPI POP POP DUP1 PUSH2 0x968 SWAP2 PUSH2 0xF4A JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0xFE2 JUMPI POP PUSH2 0xFDB DUP3 PUSH2 0x968 SWAP4 PUSH2 0xF4A JUMP JUMPDEST DIV DUP1 PUSH2 0xF4A JUMP JUMPDEST SWAP1 POP PUSH2 0xFED SWAP2 PUSH2 0x1480 JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0xF5D JUMPI PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0xF5D JUMPI DUP2 LT ISZERO PUSH2 0x1047 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST PUSH2 0x1055 DUP2 PUSH2 0x735 JUMP JUMPDEST SWAP1 PUSH2 0x1063 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1F NOT PUSH2 0x1072 DUP3 PUSH2 0x735 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH2 0x1082 DUP3 PUSH2 0x74D JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP1 MSTORE PUSH2 0x10C7 DUP4 PUSH2 0x787 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x10FE DUP4 PUSH2 0x797 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x1135 DUP4 PUSH2 0x7A7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x116C DUP4 PUSH2 0x7B7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH2 0x11A3 DUP4 PUSH2 0x7C7 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x123C JUMPI PUSH1 0x7 SWAP1 PUSH2 0x11DD DUP5 PUSH2 0x7D7 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP1 MSTORE GT PUSH2 0x120B JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x1214 DUP3 PUSH2 0x7E7 JUMP JUMPDEST SWAP1 PUSH32 0x0 AND SWAP1 MSTORE SWAP1 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x124A DUP2 PUSH2 0xD78 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1275 DUP4 PUSH2 0x74D JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x12A0 DUP4 PUSH2 0x787 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x12D4 DUP4 PUSH2 0x797 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1308 DUP4 PUSH2 0x7A7 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x133C DUP4 PUSH2 0x7B7 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH32 0x0 PUSH2 0x1370 DUP4 PUSH2 0x7C7 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0xF46 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x13A7 DUP5 PUSH2 0x7D7 JUMP JUMPDEST MSTORE GT PUSH2 0x13B0 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xF42 DUP3 PUSH2 0x7E7 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1404 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1449 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x1449 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1DAC JUMPI DUP2 ISZERO PUSH2 0x1DA6 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1D7E JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1D56 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1D45 JUMPI JUMPDEST ISZERO PUSH2 0x19E2 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1519 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x19CF JUMPI JUMPDEST ISZERO PUSH2 0x19A7 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x1994 JUMPI JUMPDEST ISZERO PUSH2 0x196C JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x195D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x18FA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x18C1 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x1887 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x184F JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1817 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x17E0 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x17A9 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x1772 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x173B JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x1738 JUMPI PUSH2 0x1738 SWAP1 PUSH2 0x142F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16B9 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16A7 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1695 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x168C JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x167A JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1668 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1656 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x1644 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x194A JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x162F JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x15D3 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15C4 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x15B4 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1D2F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1D04 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1CE3 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1CC0 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1CA0 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1C80 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1C60 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1C40 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1C29 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1C09 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1BE9 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1BCA JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1BAB JUMPI JUMPDEST POP PUSH2 0x1B58 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x1476 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1BA6 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x1588 JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B1C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AF4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AE0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1ACC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AB8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AA4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1A7A JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1A62 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1A41 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1A24 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D3B SWAP2 POP PUSH2 0x142F JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x19F7 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x14C6 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x9C979DFE41D0 0x2B 0x29 DUP9 0x2B PUSH30 0x46EC0A2E92EADB9C4641E40F6C89F036FB5A967B64736F6C634300081B00 CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 DUP11 0xF8 0xEB 0x1F 0x4E DUP2 0xBF 0xD 0x26 RETURNDATACOPY 0xAA ORIGIN SLOAD SWAP3 0x4E PUSH15 0xCB2DB28818649A5EDB0F6ED5E1EEF PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1319:808:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:45;;;1319:808:73;;;;;;;;-1:-1:-1;;1319:808:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1774:7:33;;;;1762:20;1774:7;;1762:20;:::i;:::-;1319:808:73;1336:6:43;;;1319:808:73;;;;1336:22:43;1319:808:73;1336:22:43;;;;;;;;;;;;;;;;;;;1319:808:73;1336:22:43;;;1319:808:73;;;;;;1336:64:43;;;;;1319:808:73;1336:64:43;;;;;1319:808:73;1820:10:33;1319:808:73;;;;1394:4:43;1319:808:73;;;;;1336:64:43;;;;;;;1319:808:73;1336:64:43;;;1319:808:73;1797:34:33;;1793:90;;1319:808:73;;;;;1821:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1319:808;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1821:61;;1319:808;1821:61;;;;;1319:808;;;;;;;;;;;;;;;;;;;1931:53;1319:808;;;;;;;;;;;;;1931:53;1319:808;;;;;1821:61;1319:808;;;;;;;;;;;;;;;;;;-1:-1:-1;1319:808:73;;;;;;;;;;;;1821:61;1319:808;;;;;;;;1793:90:33;1854:18;;1319:808:73;1854:18:33;1319:808:73;1854:18:33;1336:64:43;;;;;;;;;;;;;;;;:::i;:::-;;;1319:808:73;;;;;;;;;;;;1336:64:43;;;1319:808:73;;;;1336:64:43;;;;;;1319:808:73;;;;;;;;;1336:22:43;1319:808:73;1336:22:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1319:808:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1319:808:73;;;;;;1424:26:45;1319:808:73;;1424:26:45;;1319:808:73;1424:26:45;;1124:6:43;;;1319:808:73;1424:26:45;;;;;;;;;;1319:808:73;1424:26:45;;;1319:808:73;;;;;;;;1424:26:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;1319:808:73;;;;;;;;;;;;;;;-1:-1:-1;;1319:808:73;;;;;;;;;1124:6:43;1319:808:73;;;;;;;;;;;-1:-1:-1;;1319:808:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1319:808:73;;;;;;;;;;;;:::i;:::-;;;;2104:8;1319:808;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;1319:808:73;;;2303:50:33;;;2320:22;;1319:808:73;;;;;;;2303:50:33;;;1319:808:73;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;1319:808:73:-;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"create(address,address[])":"cd1d9776","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getOracle(address)":"10d3d22e","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IWeightedPool\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IWeightedLPOracle\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oracleVersion\",\"type\":\"uint256\"}],\"name\":\"WeightedLPOracleCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IWeightedPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"feeds\",\"type\":\"address[]\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IWeightedLPOracle\",\"name\":\"oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWeightedPool\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"contract IWeightedLPOracle\",\"name\":\"oracle\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/WeightedLPOracleFactory.sol\":\"WeightedLPOracleFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\":{\"keccak256\":\"0xab6ca6305d0ca426f5b456925e487a9e0bbd41b77d9bf3a4321296459a1b586f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7bf6bb63d1fdf1d2ba6cf6835b36f201aaf36092f80185774d123494ee3c9fdf\",\"dweb:/ipfs/QmeN9rfPZtGQrFo5mDG144Vz48GWGDQCqXeQ8WaKTDXCMk\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracleFactory.sol\":{\"keccak256\":\"0x0266f954e9d3a8931ebdfaffd837d6faa163bff4c8650a0e6963107fc8cab631\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e172244a9256668601473aad4eab397e8c1a54bb895c7cb101f8427ed05a0fd2\",\"dweb:/ipfs/QmNfBz4D61ta6G3zxVJZEz4yBwzzE7WgeAD9Gc6FTQrzSj\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/WeightedLPOracle.sol\":{\"keccak256\":\"0xd40cc2c85ee6c7c3432ebb1b70f6b3979b4c30f6de146ef839cdc9857ade3689\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://60cd9f72384bfaab5add9fc8e99d140745132574cf07a1188338091db43b861c\",\"dweb:/ipfs/Qma1eaCo7r9pDi9SN9PKTP4t9616HFKVczess8b4Thxooe\"]},\"contracts/WeightedLPOracleFactory.sol\":{\"keccak256\":\"0x9f058471b42966118185c0646fa3f2960ce4f4a9ca3d7f4654a0b43ff7bd05e4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ebc9c9e04b1deda1c2c5fc6aabf2ad2e016949be4a5627cf857fdf994336701e\",\"dweb:/ipfs/QmWPYPwKfKy8Q27xTVVPiAbk6cxB8YCeuaKfRdWhUXLjCA\"]}},\"version\":1}"}},"contracts/test/FeedMock.sol":{"FeedMock":{"abi":[{"inputs":[{"internalType":"uint256","name":"decimals_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint80","name":"","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lastAnswer","type":"uint256"},{"internalType":"uint256","name":"lastUpdatedAt","type":"uint256"}],"name":"setLastRoundData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608034604d57601f6102cf38819003918201601f19168301916001600160401b03831184841017605157808492602094604052833981010312604d57515f5560405161026990816100668239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040908082526004361015610014575f80fd5b5f3560e01c908163313ce567146102175750806354fd4d50146101fd5780637284e4161461012f5780637a1395aa1461010c5780639a6fc8f5146100c4578063cc8fac95146100a65763feaf968c1461006b575f80fd5b346100a2575f6003193601126100a25760a090600154905f60025491805193828552602085015283015260608201525f6080820152f35b5f80fd5b50346100a2576003193601126100a257600435600155602435600255005b50346100a25760206003193601126100a25760043569ffffffffffffffffffff8116036100a257805f60a09251918183528160208401528201525f60608201525f6080820152f35b346100a25760206003193601126100a25760043560ff81168091036100a2575f55005b50346100a2575f6003193601126100a25780519080820182811067ffffffffffffffff8211176101d05781526013825260208201917f4d6f636b20436861696e6c696e6b20466565640000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b50346100a2575f6003193601126100a257602090515f8152f35b346100a2575f6003193601126100a25760209060ff5f54168152f3fea264697066735822122015c9a238f4e0c891697cd9f289572b976c6026e716389720212d66b45a5af47264736f6c634300081b0033","opcodes":"PUSH1 0x80 CALLVALUE PUSH1 0x4D JUMPI PUSH1 0x1F PUSH2 0x2CF CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x51 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x4D JUMPI MLOAD PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH2 0x269 SWAP1 DUP2 PUSH2 0x66 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x313CE567 EQ PUSH2 0x217 JUMPI POP DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x7A1395AA EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0xC4 JUMPI DUP1 PUSH4 0xCC8FAC95 EQ PUSH2 0xA6 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x6B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0xA0 SWAP1 PUSH1 0x1 SLOAD SWAP1 PUSH0 PUSH1 0x2 SLOAD SWAP2 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 SSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x4 CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xA2 JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0xA2 JUMPI PUSH0 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI DUP1 MLOAD SWAP1 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1D0 JUMPI DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 PUSH32 0x4D6F636B20436861696E6C696E6B204665656400000000000000000000000000 DUP4 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 MLOAD SWAP5 DUP6 SWAP4 PUSH1 0x20 DUP6 MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x20 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xC9 LOG2 CODESIZE DELEGATECALL 0xE0 0xC8 SWAP2 PUSH10 0x7CD9F289572B976C6026 0xE7 AND CODESIZE SWAP8 KECCAK256 0x21 0x2D PUSH7 0xB45A5AF4726473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"188:1250:74:-:0;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;-1:-1:-1;;;;;188:1250:74;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;188:1250:74;;;;;;;;;;;-1:-1:-1;188:1250:74;;;;;;-1:-1:-1;188:1250:74;;;;;-1:-1:-1;188:1250:74"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c908163313ce567146102175750806354fd4d50146101fd5780637284e4161461012f5780637a1395aa1461010c5780639a6fc8f5146100c4578063cc8fac95146100a65763feaf968c1461006b575f80fd5b346100a2575f6003193601126100a25760a090600154905f60025491805193828552602085015283015260608201525f6080820152f35b5f80fd5b50346100a2576003193601126100a257600435600155602435600255005b50346100a25760206003193601126100a25760043569ffffffffffffffffffff8116036100a257805f60a09251918183528160208401528201525f60608201525f6080820152f35b346100a25760206003193601126100a25760043560ff81168091036100a2575f55005b50346100a2575f6003193601126100a25780519080820182811067ffffffffffffffff8211176101d05781526013825260208201917f4d6f636b20436861696e6c696e6b20466565640000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b50346100a2575f6003193601126100a257602090515f8152f35b346100a2575f6003193601126100a25760209060ff5f54168152f3fea264697066735822122015c9a238f4e0c891697cd9f289572b976c6026e716389720212d66b45a5af47264736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x313CE567 EQ PUSH2 0x217 JUMPI POP DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x7A1395AA EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0xC4 JUMPI DUP1 PUSH4 0xCC8FAC95 EQ PUSH2 0xA6 JUMPI PUSH4 0xFEAF968C EQ PUSH2 0x6B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0xA0 SWAP1 PUSH1 0x1 SLOAD SWAP1 PUSH0 PUSH1 0x2 SLOAD SWAP2 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 SSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x4 CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xA2 JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xA2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0xA2 JUMPI PUSH0 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI DUP1 MLOAD SWAP1 DUP1 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1D0 JUMPI DUP2 MSTORE PUSH1 0x13 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 PUSH32 0x4D6F636B20436861696E6C696E6B204665656400000000000000000000000000 DUP4 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 MLOAD SWAP5 DUP6 SWAP4 PUSH1 0x20 DUP6 MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x20 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xA2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA2 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xC9 LOG2 CODESIZE DELEGATECALL 0xE0 0xC8 SWAP2 PUSH10 0x7CD9F289572B976C6026 0xE7 AND CODESIZE SWAP8 KECCAK256 0x21 0x2D PUSH7 0xB45A5AF4726473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"188:1250:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;1394:11;188:1250;;;1411:14;188:1250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;;;;;629:30;188:1250;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;;;;;;;;;;;-1:-1:-1;;188:1250:74;;;;;;;;;;;;;"},"methodIdentifiers":{"decimals()":"313ce567","description()":"7284e416","getRoundData(uint80)":"9a6fc8f5","latestRoundData()":"feaf968c","setDecimals(uint8)":"7a1395aa","setLastRoundData(uint256,uint256)":"cc8fac95","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"name\":\"setDecimals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lastAnswer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUpdatedAt\",\"type\":\"uint256\"}],\"name\":\"setLastRoundData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/FeedMock.sol\":\"FeedMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]},\"contracts/test/FeedMock.sol\":{\"keccak256\":\"0x7e76f3ee6a51bf997e3a0779ff8d8f1092afe63af47fdf419c867a3af5bb06f9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0156669c7682f93c3c469c06a1cbe4fdccae8a2239e660e6e0d953a5e929ba0e\",\"dweb:/ipfs/QmfULAKoXeEPh5TE2EAvjdNbJbLonHPfPAvww8QUoNshGP\"]}},\"version\":1}"}},"contracts/test/PriceImpactHelperMock.sol":{"PriceImpactHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"maxNegativeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"minPositiveIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"queryAddLiquidityUnbalancedForTokenDeltas","outputs":[{"internalType":"int256","name":"deltaBPT","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"int256[]","name":"deltaBPTs","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"zeroOutDeltas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6113fd38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161134a90816100b3823960805181610a00015260a05181818161032501528181610b9c01528181610d500152610ef70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea26469706673582212206ac786261c9383fd66216ac22a152611feaca679c1593283d07ac9fa9340108e64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x13FD CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x134A SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xA00 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x325 ADD MSTORE DUP2 DUP2 PUSH2 0xB9C ADD MSTORE DUP2 DUP2 PUSH2 0xD50 ADD MSTORE PUSH2 0xEF7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0xC786261C9383FD66216AC2 0x2A ISZERO 0x26 GT INVALID 0xAC 0xA6 PUSH26 0xC1593283D07AC9FA9340108E64736F6C634300081B0033000000 ","sourceMap":"302:957:75:-:0;;;;;;;;;;;;;-1:-1:-1;;302:957:75;;;;-1:-1:-1;;;;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;302:957:75;;;;;;;;;;;;;;;;;;779:14:68;;803:16;;302:957:75;;;;;;;;779:14:68;302:957:75;;;;;803:16:68;302:957:75;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:75;;;;;;-1:-1:-1;302:957:75;;;;;-1:-1:-1;302:957:75"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1829,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_7052":{"entryPoint":1864,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_int256_dyn":{"entryPoint":1733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":2177,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":1927,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_int256_dyn":{"entryPoint":1709,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":1899,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":2130,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1629,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":4243,"id":4581,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":4411,"id":13245,"parameterSlots":2,"returnSlots":1},"fun_maxNegativeIndex":{"entryPoint":2214,"id":15441,"parameterSlots":1,"returnSlots":1},"fun_minPositiveIndex":{"entryPoint":2340,"id":15388,"parameterSlots":1,"returnSlots":1},"fun_parseSelector":{"entryPoint":4187,"id":4563,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3643,"id":14974,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3990,"id":15171,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3905,"id":12025,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":4134,"id":11189,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":4258,"id":10196,"parameterSlots":3,"returnSlots":1},"fun_zeroOutDeltas":{"entryPoint":2460,"id":15335,"parameterSlots":4,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":1976,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2041,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"14780":[{"length":32,"start":2560}],"14783":[{"length":32,"start":805},{"length":32,"start":2972},{"length":32,"start":3408},{"length":32,"start":3831}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea26469706673582212206ac786261c9383fd66216ac22a152611feaca679c1593283d07ac9fa9340108e64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0xC786261C9383FD66216AC2 0x2A ISZERO 0x26 GT INVALID 0xAC 0xA6 PUSH26 0xC1593283D07AC9FA9340108E64736F6C634300081B0033000000 ","sourceMap":"302:957:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26:62;;;302:957:75;;;;;;;;-1:-1:-1;;302:957:75;;;;;;;:::i;:::-;;;;;;;;;;;658:76;302:957;;;;;;;:::i;:::-;;;:::i;:::-;;;;658:76;;:::i;:::-;302:957;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:75;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:62;;;;;;;:::i;:::-;840:718;;;;;990:10;302:957:75;990:10:62;955:63;990:10;302:957:75;990:10:62;;955:63;:::i;:::-;;302:957:75;1084:26:62;;;;;;;;302:957:75;;;;;;:::i;:::-;1084:26:62;;;840:718;1276:33;;1344:27;302:957:75;1276:33:62;;;:::i;:::-;302:957:75;1327:44:62;1323:110;;1540:6;;:::i;1323:110::-;1398:20;302:957:75;1398:20:62;302:957:75;1398:20:62;302:957:75;;;;;;;-1:-1:-1;;302:957:75;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1265:58:68;;;;;:::i;:::-;302:957:75;;;3717:247:68;302:957:75;3717:247:68;;;;302:957:75;;;3717:247:68;;;302:957:75;;;;;;;;;;;;;;;;;;;;3717:247:68;;302:957:75;;;;;;;;;;;;;;3643:339:68;;302:957:75;3687:7:68;302:957:75;3643:339:68;:::i;:::-;302:957:75;;;3615:410:68;;;;;;;;302:957:75;;;;;3615:410:68;;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:35:68;302:957:75;;1544:35:68;:::i;:::-;1594:13;302:957:75;1636:3:68;302:957:75;;1609:25:68;;;;;1667:36;:25;;;;:::i;:::-;302:957:75;1667:36:68;:::i;:::-;1706:28;:17;;;;:::i;:28::-;302:957:75;;;;;;;;;;;;;;;;;;;;;1655:79:68;302:957:75;1655:79:68;;;;;:::i;:::-;302:957:75;;1594:13:68;;302:957:75;;;;;;;;;;1609:25:68;;;;;;;;;1890:35;302:957:75;;1890:35:68;:::i;:::-;1940:13;302:957:75;1982:3:68;302:957:75;;1955:25:68;;;;;2016:67;;;;302:957:75;2016:67:68;;;:::i;:::-;2001:82;;;;:::i;:::-;302:957:75;;1940:13:68;;1955:25;;;2549:35;1955:25;2476:42;2477:28;2478:27;2214:47;1955:25;;;;;2214:47;:::i;:::-;2478:27;;;:::i;:::-;302:957:75;2477:28:68;:::i;:::-;2476:42;:::i;:::-;2549:35;;:::i;:::-;302:957:75;465:4:38;;;;;;;;;;;;;;;;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;465:4:38;302:957:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:75;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;933:47;302:957;;;;;;;:::i;:::-;;;;:::i;:::-;933:47;;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:75;;;;;;;;;;;;;;1091:24;302:957;;;;;;;:::i;:::-;1091:24;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:75;;;;;;;;;;;;;;1226:24;302:957;;;;;;;:::i;:::-;1226:24;:::i;302:957::-;;;-1:-1:-1;;302:957:75;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;302:957:75;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;302:957:75;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;302:957:75;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;302:957:75;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:75;;;;;;;;;;;:::o;8915:320:68:-;9026:16;;8915:320;302:957:75;;9090:3:68;302:957:75;;9072:16:68;;;;;302:957:75;9113:8:68;;;;:::i;:::-;302:957:75;9113:12:68;:30;;;9090:3;9109:110;;9090:3;302:957:75;;9057:13:68;;9109:110;9169:8;;;;;;;;:::i;:::-;302:957:75;;9195:9:68;9109:110;;9113:30;9129:8;;;;;;:::i;:::-;302:957:75;9129:14:68;9113:30;;9072:16;;;;;8915:320::o;8488:::-;8599:16;;8488:320;302:957:75;;8663:3:68;302:957:75;;8645:16:68;;;;;302:957:75;8686:8:68;;;;:::i;:::-;302:957:75;8686:12:68;:30;;;8663:3;8682:110;;8663:3;302:957:75;;8630:13:68;;8682:110;8742:8;;;;;;;;:::i;:::-;302:957:75;;8768:9:68;8682:110;;8686:30;8702:8;;;;;;:::i;:::-;302:957:75;8702:14:68;8686:30;;6265:2115;;;;302:957:75;;;;6588:26:68;302:957:75;6588:26:68;;302:957:75;;;6588:26:68;;;302:957:75;;6588:6:68;302:957:75;6588:6:68;302:957:75;6588:6:68;302:957:75;6588:26:68;;;;;;;302:957:75;6588:26:68;;;6265:2115;6630:13;;;;;302:957:75;6625:1710:68;6668:3;302:957:75;;;;;;;;;;6645:21:68;;;;;6786:28;;;;;;;;;:::i;:::-;6852;;;;;;;:::i;:::-;6895:23;;;7009:32;7044:33;7045:32;7009;;;;;:::i;:::-;302:957:75;7045:32:68;;:::i;7044:33::-;-1:-1:-1;7045:32:68;;;4287:397;7097:39;4361:305;7097:39;;;7402:35;:23;7097:39;302:957:75;7352:28:68;4361:305;7097:39;7154:40;7303:27;;;;;;:::i;:::-;302:957:75;;7352:28:68;;:::i;:::-;302:957:75;;7402:23:68;;:::i;:::-;302:957:75;7402:35:68;:::i;:::-;302:957:75;;;;;;4361:305:68;302:957:75;4361:305:68;;;;302:957:75;4361:305:68;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4361:305:68;;-1:-1:-1;;4361:305:68;;;;;;:::i;:::-;302:957:75;4331:7:68;302:957:75;4287:397:68;:::i;:::-;302:957:75;;;;4259:466:68;;302:957:75;;;;8025:30:68;4259:466;302:957:75;7984:27:68;4259:466;;8097:23;4259:466;;;;302:957:75;7005:922:68;7984:27;:::i;:::-;302:957:75;8025:30:68;;:::i;:::-;302:957:75;8097:23:68;:::i;:::-;8069:51;;;;;:::i;:::-;302:957:75;;;;;;;;;;;;;;;;;;;;;6665:1:68;8069:51;;;;;:::i;:::-;302:957:75;8134:190:68;8164:160;;;;;;:::i;:::-;8134:190;;;:::i;:::-;302:957:75;;6630:13:68;;;;;;;7005:922;7522:39;;;;;;7579:40;7729:28;;;;:::i;:::-;302:957:75;;;7779:27:68;;;;;:::i;:::-;302:957:75;;;7830:23:68;;;;:::i;:::-;302:957:75;7829:24:68;;;:::i;:::-;7828:38;;;:::i;:::-;302:957:75;;;;5063:307:68;;;;;;;302:957:75;;;;;5063:307:68;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:75;;;;;;;;5063:307:68;;302:957:75;5063:307:68;302:957:75;;5063:307:68;:::i;:::-;4989:399;;302:957:75;5033:7:68;302:957:75;4989:399:68;:::i;6645:21::-;;;;;;;;;6265:2115;:::o;6588:26::-;;;;;;302:957:75;6588:26:68;;;;;;:::i;:::-;;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:26:68;;;;;;;;302:957:75;;;;;;;;;;;;;;;;;;;;6588:26:68;302:957:75;;;;;;;;;2820:599:68;;;;302:957:75;;;3109:244:68;;;302:957:75;3109:244:68;;;;302:957:75;;;;;;3109:244:68;;;302:957:75;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:75;;;;;;;;;;3035:336:68;302:957:75;;;;3109:244:68;302:957:75;;;;;;-1:-1:-1;302:957:75;;;;;;;;;;;;3109:244:68;;;;;;:::i;:::-;3079:7;302:957:75;3035:336:68;:::i;:::-;302:957:75;;;;3007:405:68;;302:957:75;;;;3007:405:68;302:957:75;2820:599:68;:::o;302:957:75:-;;;;;;;;;;;;;;;;;34375:314:59;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;302:957:75;;34608:34:59;;5657:602:68;;;;5950:18;302:957:75;;;;-1:-1:-1;;302:957:75;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;5950:18:68;:::i;:::-;302:957:75;5983:10:68;;;5979:49;;6141:64;6081:9;6038:70;302:957:75;6081:9:68;;:26;;;;;;;;6038:70;;:::i;:::-;302:957:75;6141:64:68;:::i;:::-;6224:28;;;;5657:602;:::o;6224:28::-;6245:7;;;:::i;:::-;5657:602;:::o;6081:26::-;6101:6;;;:::i;:::-;6081:26;;;5979:49;6009:8;;;;;302:957:75;6009:8:68;:::o;17166:193:59:-;17253:1;17245:9;;17241:81;;17166:193;:::o;17241:81::-;17277:34;17253:1;17277:34;;302:957:75;;17253:1:59;17277:34;1336:351:36;1463:1;302:957:75;;1443:21:36;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;302:957:75;;1881:21:36;:17;;2008:160;;;;;;4625:582:56;;4797:8;;-1:-1:-1;302:957:75;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;302:957:75;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;302:957:75;5121:24:56;;5066:1;5121:24;302:957:75;5121:24:56;302:957:75;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;;303:324:62;;430:4;408:60;;;;;302:957:75;;;;408:60:62;;;;302:957:75;408:60:62;;302:957:75;408:60:62;302:957:75;;408:60:62;;;302:957:75;;;;;;;;;;;:::i;:::-;408:60:62;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:62;;523:98;;:::i;:::-;720:36:36;787:15;302:957:75;720:36:36;;;:::i;:::-;302:957:75;770:32:36;766:185;;302:957:75;;1013:179:36;1209:30;-1:-1:-1;;1013:179:36;;;;408:60:62;1013:179:36;;;1209:30;;;;;;;302:957:75;;;;;;;1209:30:36;;302:957:75;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:36;302:957:75;;;;;;;;;;565:45:62;:::o;302:957:75:-;;;;;;;;766:185:36;930:9;;:::i;404:217:62:-;302:957:75;;;483:28:62;;;302:957:75;408:60:62;483:28;;302:957:75;;;;;;;;;;;483:28:62;408:60;302:957:75;;;;;;;;;;408:60:62;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638","maxNegativeIndex(int256[])":"01ef39ee","minPositiveIndex(int256[])":"0d4277d1","queryAddLiquidityUnbalancedForTokenDeltas(address,uint256,int256[],address)":"e3a50d82","zeroOutDeltas(address,int256[],int256[],address)":"3b064ca3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"maxNegativeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"minPositiveIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"queryAddLiquidityUnbalancedForTokenDeltas\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"deltaBPT\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"deltaBPTs\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"zeroOutDeltas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PriceImpactHelperMock.sol\":\"PriceImpactHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x39a5cd3ee5c0bab644f068ad8ba617a0cf71a91610693b1c93c9536464151ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6a5f61af5cda44d8ef95e610c0b418f2cfb984e9c47a58fb1fa8c8bc949def75\",\"dweb:/ipfs/Qmby1D2D5Ym44jgBTTM8eTGnmNGCCKrb8ujpkhVPE6C6Cr\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0xc7a235e866cb76517b3e21a399fffcaab048f41c370e38123e52f9369d071b38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b71a034acf450b2b356a80e5f7cbe62137ba4702891a8e174b558d91180ade8a\",\"dweb:/ipfs/QmU5hLqocw2S1vXgmwd756CVwbG3yySQJe1ipbAJjRbPCU\"]},\"contracts/test/PriceImpactHelperMock.sol\":{\"keccak256\":\"0xe26253f71789842fffe3d5e48f5fb13a7aed480f8027c1084a0601b02d9fb3f9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70f67c49efb5abf6e726635b6e797a7b4e335d4cd9650affce44c19305511566\",\"dweb:/ipfs/QmU2XCzDpMjBrhdaQJ6aAvqPJ2xQbomTpJGEmG6BpDAKrE\"]}},\"version\":1}"}},"contracts/test/ProtocolFeeBurnerMock.sol":{"ProtocolFeeBurnerMock":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setTokenRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferFromEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602c57670de0b6b3a76400005f55600160ff198154161760015561056590816100318239f35b5f80fdfe608060409080825260049081361015610016575f80fd5b5f925f3560e01c9182637d341ad61461042a578263de557a321461007d57505063e38e91f914610044575f80fd5b346100795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100795735815580f35b5080fd5b90929150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735781359073ffffffffffffffffffffffffffffffffffffffff80831680930361027357602494853594828616809603610273576044359360643597848916809903610273576084359160a4359586168096036102735760c43542116104035760ff60015416610277575b50883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b602081017f23b872dd00000000000000000000000000000000000000000000000000000000815233838301523060448301528760648301526064825260a082019167ffffffffffffffff92818110848211176103a0578752515f91829190828d5af13d156103f6573d8281116103cb57865192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176103a0578752825261033a91903d5f602084013e5b8a610496565b805190811515918261037c575b5050610353575f610119565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b81925090602091810103126102735760200151801590811503610273575f80610347565b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b836041877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b61033a9150606090610334565b837fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f35b906104d357508051156104ab57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610526575b6104e4575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156104dc56fea26469706673582212201e7dde5b3712e1d54358fec3806637d1bfada77ff300eaee70ce7617e8ad651964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2C JUMPI PUSH8 0xDE0B6B3A7640000 PUSH0 SSTORE PUSH1 0x1 PUSH1 0xFF NOT DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH2 0x565 SWAP1 DUP2 PUSH2 0x31 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x42A JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7D JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x44 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x79 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x79 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP5 DUP6 CALLDATALOAD SWAP5 DUP3 DUP7 AND DUP1 SWAP7 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP8 DUP5 DUP10 AND DUP1 SWAP10 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP6 DUP7 AND DUP1 SWAP7 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x403 JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER DUP4 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP8 PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x3A0 JUMPI DUP8 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 DUP3 DUP14 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x3F6 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x3CB JUMPI DUP7 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x3A0 JUMPI DUP8 MSTORE DUP3 MSTORE PUSH2 0x33A SWAP2 SWAP1 RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP11 PUSH2 0x496 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x37C JUMPI JUMPDEST POP POP PUSH2 0x353 JUMPI PUSH0 PUSH2 0x119 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x273 JUMPI PUSH1 0x20 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x273 JUMPI PUSH0 DUP1 PUSH2 0x347 JUMP JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP4 PUSH1 0x41 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x33A SWAP2 POP PUSH1 0x60 SWAP1 PUSH2 0x334 JUMP JUMPDEST DUP4 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 PUSH2 0x4D3 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x4AB JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x526 JUMPI JUMPDEST PUSH2 0x4E4 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x4DC JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1E PUSH30 0xDE5B3712E1D54358FEC3806637D1BFADA77FF300EAEE70CE7617E8AD6519 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:76:-:0;;;;;;;465:4:38;700:14:76;465:4:38;748::76;465::38;;;;;;748::76;465::38;544:1496:76;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"fun_verifyCallResultFromTarget":{"entryPoint":1174,"id":10196,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f925f3560e01c9182637d341ad61461042a578263de557a321461007d57505063e38e91f914610044575f80fd5b346100795760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100795735815580f35b5080fd5b90929150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735781359073ffffffffffffffffffffffffffffffffffffffff80831680930361027357602494853594828616809603610273576044359360643597848916809903610273576084359160a4359586168096036102735760c43542116104035760ff60015416610277575b50883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b602081017f23b872dd00000000000000000000000000000000000000000000000000000000815233838301523060448301528760648301526064825260a082019167ffffffffffffffff92818110848211176103a0578752515f91829190828d5af13d156103f6573d8281116103cb57865192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176103a0578752825261033a91903d5f602084013e5b8a610496565b805190811515918261037c575b5050610353575f610119565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b81925090602091810103126102735760200151801590811503610273575f80610347565b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b836041877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b61033a9150606090610334565b837fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f35b906104d357508051156104ab57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610526575b6104e4575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156104dc56fea26469706673582212201e7dde5b3712e1d54358fec3806637d1bfada77ff300eaee70ce7617e8ad651964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x42A JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7D JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x44 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x79 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x79 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP5 DUP6 CALLDATALOAD SWAP5 DUP3 DUP7 AND DUP1 SWAP7 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP8 DUP5 DUP10 AND DUP1 SWAP10 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP6 DUP7 AND DUP1 SWAP7 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x403 JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER DUP4 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP8 PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x3A0 JUMPI DUP8 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 DUP3 DUP14 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x3F6 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x3CB JUMPI DUP7 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x3A0 JUMPI DUP8 MSTORE DUP3 MSTORE PUSH2 0x33A SWAP2 SWAP1 RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP11 PUSH2 0x496 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x37C JUMPI JUMPDEST POP POP PUSH2 0x353 JUMPI PUSH0 PUSH2 0x119 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x273 JUMPI PUSH1 0x20 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x273 JUMPI PUSH0 DUP1 PUSH2 0x347 JUMP JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP4 PUSH1 0x41 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x33A SWAP2 POP PUSH1 0x60 SWAP1 PUSH2 0x334 JUMP JUMPDEST DUP4 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 PUSH2 0x4D3 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x4AB JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x526 JUMPI JUMPDEST PUSH2 0x4E4 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x4DC JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1E PUSH30 0xDE5B3712E1D54358FEC3806637D1BFADA77FF300EAEE70CE7617E8AD6519 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1038:15;:26;1034:78;;544:1496;;;;1122:125;;544:1496;1341:75;;;;;;544:1496;;;;;;1341:75;;;;544:1496;1341:75;;;;;;544:1496;;;;;;1341:75;;;;;;;;544:1496;;;;;;;;;;;;;;;;;;465:4:38;;;1511:32:76;;;;1507:133;;-1:-1:-1;;544:1496:76;;;;;-1:-1:-1;544:1496:76;;;;;;;1736:99;;544:1496;;1736:99;544:1496;;1507:133;1566:63;;;;;544:1496;1566:63;;;;544:1496;;;;1566:63;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;;;1341:75;;;;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;1341:75;544:1496;;;1122:125;544:1496;1829:53:55;;544:1496:76;1829:53:55;;1187:10:76;1829:53:55;;;544:1496:76;1207:4;544:1496;;;;;;;;;;1829:53:55;;544:1496:76;;;;;;;;;;;;;;;;;3462:31:56;544:1496:76;;;;3462:31:56;544:1496:76;3462:31:56;;;544:1496:76;;;;;;;;;;;;;;;;1829:53:55;544:1496:76;;;;;;;;;;;;;;;;;;;;;3510:55:56;;544:1496:76;;;;;;;;3510:55:56;;:::i;:::-;544:1496:76;;4551:22:55;;;;:57;;;;544:1496:76;4547:135:55;;;;1122:125:76;;;4547:135:55;4631:40;;;544:1496:76;4631:40:55;544:1496:76;;4631:40:55;4551:57;4578:30;;;;544:1496:76;4578:30:55;;;544:1496:76;;;;;4578:30:55;544:1496:76;;;;;;;;;4551:57:55;;;;544:1496:76;;;;;;;;;;;;;;;;;;;;;3510:55:56;544:1496:76;;;;;;1034:78;1087:14;;544:1496;1087:14;544:1496;1087:14;544:1496;;;;;;;;;;;;;;;;;;;;;;;2002:29;544:1496;;;;;2002:29;544:1496;;;;4625:582:56;;4797:8;;-1:-1:-1;544:1496:76;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;544:1496:76;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;544:1496:76;5121:24:56;;5066:1;5121:24;544:1496:76;5121:24:56;544:1496:76;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","setTokenRatio(uint256)":"e38e91f9","setTransferFromEnabled(bool)":"7d341ad6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setTokenRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setTransferFromEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ProtocolFeeBurnerMock.sol\":\"ProtocolFeeBurnerMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]},\"contracts/test/ProtocolFeeBurnerMock.sol\":{\"keccak256\":\"0x7cfd3dfbc1895894ba1d79d4f0d9846b23885d73efaa632793a0492ad87438a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d7455c59d8ad21fbf51407692f502313802d5cb0fdd96b3542b5f58c865781bf\",\"dweb:/ipfs/QmVe1Zuor843H3SgX3kBNHnJUENHJU3jK3eUfVAnPBbtsD\"]}},\"version\":1}"}},"contracts/test/VaultMockForFeeSweeper.sol":{"VaultMockForFeeSweeper":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602b57335f525f60205260405f20600160ff198254161790556106af90816100308239f35b5f80fdfe60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461048a57508063173825d9146104125780637065cb481461039757806385f2dbd4146102fb5780638f4ab9ca1461037c5780639be2a88414610315578063aaabadc5146102fb578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104f2565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed6104cf565b506100f66104f2565b6044359173ffffffffffffffffffffffffffffffffffffffff918284168094036100cf57335f526020925f845261013260ff845f205416610515565b82517f70a082310000000000000000000000000000000000000000000000000000000081523060048201528481602481895afa9081156102f1575f916102c4575b50835191858301937fa9059cbb0000000000000000000000000000000000000000000000000000000085521660248301526044820152604481526080810167ffffffffffffffff9282821084831117610289575f9283928652519082885af13d156102b6573d91821161028957610226925191610217857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461059f565b82523d5f8584013e5b846105e0565b8051918215159182610268575b5050905061023d57005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8092508193810103126100cf5701518015908115036100cf57805f80610233565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610226925060609150610220565b90508481813d83116102ea575b6102db818361059f565b810103126100cf57515f610173565b503d6102d1565b84513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf5761032f6104f2565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf576103956104cf565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff6103c66104cf565b335f525f6020526103dc60ff845f205416610515565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff6104416104cf565b335f525f60205261045760ff845f205416610515565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff6104bf6104cf565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b1561051c57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028957604052565b9061061d57508051156105f557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610670575b61062e575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561062656fea26469706673582212206fae709c66e3298e7f387ea324f07b448eee16692c82446fdf1d382a2feecdfd64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2B JUMPI CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x6AF SWAP1 DUP2 PUSH2 0x30 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x48A JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4F2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x4CF JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 AND DUP1 SWAP5 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x132 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x515 JUMP JUMPDEST DUP3 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2F1 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP4 MLOAD SWAP2 DUP6 DUP4 ADD SWAP4 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH1 0x80 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP3 DUP3 LT DUP5 DUP4 GT OR PUSH2 0x289 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP7 MSTORE MLOAD SWAP1 DUP3 DUP9 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2B6 JUMPI RETURNDATASIZE SWAP2 DUP3 GT PUSH2 0x289 JUMPI PUSH2 0x226 SWAP3 MLOAD SWAP2 PUSH2 0x217 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x59F JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 DUP6 DUP5 ADD RETURNDATACOPY JUMPDEST DUP5 PUSH2 0x5E0 JUMP JUMPDEST DUP1 MLOAD SWAP2 DUP3 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x268 JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x23D JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 DUP2 ADD SUB SLT PUSH2 0xCF JUMPI ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0xCF JUMPI DUP1 PUSH0 DUP1 PUSH2 0x233 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x226 SWAP3 POP PUSH1 0x60 SWAP2 POP PUSH2 0x220 JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2EA JUMPI JUMPDEST PUSH2 0x2DB DUP2 DUP4 PUSH2 0x59F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x173 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2D1 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x32F PUSH2 0x4F2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x395 PUSH2 0x4CF JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3C6 PUSH2 0x4CF JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x3DC PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x515 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x441 PUSH2 0x4CF JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x457 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x515 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4BF PUSH2 0x4CF JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x51C JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x289 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x61D JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x5F5 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x670 JUMPI JUMPDEST PUSH2 0x62E JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x626 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0xAE709C66E3298E7F387EA324F07B448E 0xEE AND PUSH10 0x2C82446FDF1D382A2FEE 0xCD REVERT PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"437:1297:77:-:0;;;;;;;599:10;592:6;437:1297;592:6;437:1297;;;592:6;437:1297;613:4;437:1297;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1231,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_5121":{"entryPoint":1266,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1439,"id":null,"parameterSlots":2,"returnSlots":0},"fun_canPerform":{"entryPoint":null,"id":18197,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":1504,"id":10196,"parameterSlots":3,"returnSlots":1},"require_helper_stringliteral_6a76":{"entryPoint":1301,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461048a57508063173825d9146104125780637065cb481461039757806385f2dbd4146102fb5780638f4ab9ca1461037c5780639be2a88414610315578063aaabadc5146102fb578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104f2565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed6104cf565b506100f66104f2565b6044359173ffffffffffffffffffffffffffffffffffffffff918284168094036100cf57335f526020925f845261013260ff845f205416610515565b82517f70a082310000000000000000000000000000000000000000000000000000000081523060048201528481602481895afa9081156102f1575f916102c4575b50835191858301937fa9059cbb0000000000000000000000000000000000000000000000000000000085521660248301526044820152604481526080810167ffffffffffffffff9282821084831117610289575f9283928652519082885af13d156102b6573d91821161028957610226925191610217857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461059f565b82523d5f8584013e5b846105e0565b8051918215159182610268575b5050905061023d57005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8092508193810103126100cf5701518015908115036100cf57805f80610233565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610226925060609150610220565b90508481813d83116102ea575b6102db818361059f565b810103126100cf57515f610173565b503d6102d1565b84513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf5761032f6104f2565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf576103956104cf565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff6103c66104cf565b335f525f6020526103dc60ff845f205416610515565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff6104416104cf565b335f525f60205261045760ff845f205416610515565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff6104bf6104cf565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b1561051c57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028957604052565b9061061d57508051156105f557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610670575b61062e575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561062656fea26469706673582212206fae709c66e3298e7f387ea324f07b448eee16692c82446fdf1d382a2feecdfd64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x48A JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x412 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x397 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4F2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x4CF JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 AND DUP1 SWAP5 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x132 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x515 JUMP JUMPDEST DUP3 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2F1 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP4 MLOAD SWAP2 DUP6 DUP4 ADD SWAP4 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH1 0x80 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP3 DUP3 LT DUP5 DUP4 GT OR PUSH2 0x289 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP7 MSTORE MLOAD SWAP1 DUP3 DUP9 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2B6 JUMPI RETURNDATASIZE SWAP2 DUP3 GT PUSH2 0x289 JUMPI PUSH2 0x226 SWAP3 MLOAD SWAP2 PUSH2 0x217 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x59F JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 DUP6 DUP5 ADD RETURNDATACOPY JUMPDEST DUP5 PUSH2 0x5E0 JUMP JUMPDEST DUP1 MLOAD SWAP2 DUP3 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x268 JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x23D JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP2 SWAP4 DUP2 ADD SUB SLT PUSH2 0xCF JUMPI ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0xCF JUMPI DUP1 PUSH0 DUP1 PUSH2 0x233 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x226 SWAP3 POP PUSH1 0x60 SWAP2 POP PUSH2 0x220 JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2EA JUMPI JUMPDEST PUSH2 0x2DB DUP2 DUP4 PUSH2 0x59F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x173 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2D1 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x32F PUSH2 0x4F2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x395 PUSH2 0x4CF JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3C6 PUSH2 0x4CF JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x3DC PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x515 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x441 PUSH2 0x4CF JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x457 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x515 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x4BF PUSH2 0x4CF JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x51C JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x289 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x61D JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x5F5 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x670 JUMPI JUMPDEST PUSH2 0x62E JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x626 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0xAE709C66E3298E7F387EA324F07B448E 0xEE AND PUSH10 0x2C82446FDF1D382A2FEE 0xCD REVERT PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"437:1297:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;;;;:::i;:::-;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;676:10;437:1297;;;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;1694:30;;1718:4;437:1297;1694:30;;437:1297;1694:30;;437:1297;1694:30;;;;;;;;;437:1297;1694:30;;;437:1297;;;;1412:43:55;;;;;437:1297:77;1412:43:55;;437:1297:77;;1412:43:55;;437:1297:77;;;;;;1412:43:55;;437:1297:77;;;;;;;;;;;;;;;;;;;;3462:31:56;;;;;;437:1297:77;;;;;;;;;;3510:55:56;437:1297:77;;;;;1412:43:55;437:1297:77;;;;;;;:::i;:::-;;;;;;;;;;3510:55:56;;:::i;:::-;437:1297:77;;4551:22:55;;;;:57;;;;437:1297:77;4547:135:55;;;;;;437:1297:77;4547:135:55;4631:40;437:1297:77;4631:40:55;437:1297:77;;;;4631:40:55;4551:57;4578:30;;;;;;;437:1297:77;;;;4578:30:55;437:1297:77;;;;;;;;;4551:57:55;;;;;437:1297:77;;;;;;;;;;;3510:55:56;;-1:-1:-1;437:1297:77;;-1:-1:-1;437:1297:77;;1694:30;;;;;;;;;;;;;;;;:::i;:::-;;;437:1297;;;;;1694:30;;;;;;;;;437:1297;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;;861:4;437:1297;;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;:::i;:::-;;;;;;;;;;;;;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;-1:-1:-1;;437:1297:77;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;1209:4;437:1297;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:77;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4625:582:56:-;;4797:8;;-1:-1:-1;437:1297:77;;5874:21:56;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;437:1297:77;;5045:22:56;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;437:1297:77;5121:24:56;;5066:1;5121:24;437:1297:77;5121:24:56;437:1297:77;;5066:1:56;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addOwner(address)":"7065cb48","canPerform(bytes32,address)":"c6a92e16","canPerform(bytes32,address,address)":"9be2a884","collectAggregateFees(address)":"8f4ab9ca","getAuthorizer()":"aaabadc5","getProtocolFeeController()":"85f2dbd4","owners(address)":"022914a7","removeOwner(address)":"173825d9","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"owners\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/VaultMockForFeeSweeper.sol\":\"VaultMockForFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"contracts/test/VaultMockForFeeSweeper.sol\":{\"keccak256\":\"0x48c7112d31adaf06bbbe4d1959227d5919ff86f21d3bffc0196d5cd2f7fdcf26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a1791c0f942abe86b2fd13977412f3fd021cac29922b54482e59d840479fc42f\",\"dweb:/ipfs/QmYLEbg3SgTUDBQ3ZktT2exGbpk7MSBsNpCpAdvqfoTcU4\"]}},\"version\":1}"}},"contracts/test/WeightedLPOracleMock.sol":{"WeightedLPOracleMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"contract IWeightedPool","name":"pool_","type":"address"},{"internalType":"contract AggregatorV3Interface[]","name":"feeds","type":"address[]"},{"internalType":"uint256","name":"version_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[],"name":"UnsupportedDecimals","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[{"internalType":"contract AggregatorV3Interface","name":"feed","type":"address"}],"name":"calculateFeedTokenDecimalScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256[]","name":"prices","type":"int256[]"}],"name":"calculateTVL","outputs":[{"internalType":"uint256","name":"tvl","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedData","outputs":[{"internalType":"int256[]","name":"prices","type":"int256[]"},{"internalType":"uint256","name":"updatedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeedTokenDecimalScalingFactors","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeds","outputs":[{"internalType":"contract AggregatorV3Interface[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract IWeightedPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"array_allocation_size_array_contract_AggregatorV3Interface_dyn":{"entryPoint":2038,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":1983,"id":null,"parameterSlots":2,"returnSlots":0},"fun_computeFeedTokenDecimalScalingFactor":{"entryPoint":2207,"id":17309,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn":{"entryPoint":2142,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6782":{"entryPoint":2061,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6785":{"entryPoint":2094,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6788":{"entryPoint":2110,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6791":{"entryPoint":2126,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6797":{"entryPoint":2158,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6800":{"entryPoint":2174,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_contract_AggregatorV3Interface_dyn_6803":{"entryPoint":2190,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6104006040908082523461066757612860803803809161001f82856107bf565b833981016080828203126106675781516001600160a01b0392838216918281036106675760209586830151968688169788810361066757848301516001600160401b03919082811161066757860194601f96898888011215610667578651996100878b6107f6565b976100948851998a6107bf565b8b8952868901908760059d8e1b820101928311610667578701905b8282106107a7575050506060015160c05260805260a05282519863ca4f280360e01b8a525f8a60248160049a858c8301525afa998a15610710575f9a61071a575b50985f8798999a85519889809263f89f27ed60e01b82525afa968715610710575f97610688575b5051948560e052875f8b60a051168651928380926395d89b4160e01b82525afa90811561067e579084915f916105eb575b5060246101799187519381859251918291018984015e8101630bd554d160e21b88820152038b8101845201826107bf565b80519283116105d8575f54936001948581811c911680156105ce575b828210146105bb57838111610579575b508092841160011461051757509282939183925f9461050c575b50501b915f199060031b1c1916175f555b815183036104fe57866101e28361080d565b5116916102009283526101f48561080d565b5197610100988952610210816102098461080d565b511661089f565b956103009687526007826102238561082e565b5116966102209788526102358361082e565b519a6101209b8c5261024a856102098861082e565b9a6103209b8c52600283116104ca575b60038311610496575b8211610462575b811161042e575b600681116103fa575b116103c4575b5050505194611eff9687610961883960805187818161013101526109ba015260a05187818161010b0152818161079d015261095f015260c05187610667015260e0518781816102850152818161047e0152818161074f0152818161091d0152610c7001525186610ec401525185610eef01526101405185610f2301526101605185610f5701526101805185610f8b01526101a05185610fbf01526101c05185610ff601526101e05185611029015251846111ab015251836111d80152610240518361120f015261026051836112460152610280518361127d01526102a051836112b401526102c051836112ef01526102e051836113260152518261135c01525181611387015261034051816113bb015261036051816113ef0152610380518161142301526103a0518161145701526103c0518161148e01526103e051816114c10152f35b826103e461020992846103d96103ee9761088e565b51166102e05261088e565b516101e05261088e565b6103e0525f8080610280565b836104048661087e565b51166102c0526104138361087e565b516101c052610425846102098761087e565b6103c05261027a565b836104388661086e565b51166102a0526104478361086e565b516101a052610459846102098761086e565b6103a052610271565b8461046c8761085e565b51166102805261047b8461085e565b516101805261048d856102098861085e565b6103805261026a565b856104a08861084e565b5116610260526104af8561084e565b51610160526104c1866102098961084e565b61036052610263565b856104d48861083e565b5116610240526104e38561083e565b51610140526104f5866102098961083e565b6103405261025a565b8463aaad13f760e01b5f525ffd5b015192505f806101bf565b919083601f1981165f8052845f20945f905b8883831061055f5750505010610547575b505050811b015f556101d0565b01515f1960f88460031b161c191690555f808061053a565b858701518855909601959485019487935090810190610529565b5f8052815f20848d818801901c8201928488106105b2575b018d1c019086905b8281106105a75750506101a5565b5f8155018690610599565b92508192610591565b60228b634e487b7160e01b5f525260245ffd5b90607f1690610195565b604189634e487b7160e01b5f525260245ffd5b9150503d805f833e6105fd81836107bf565b81019084818303126106675780519084821161066757018183820112156106675780519084821161066b5786519261063d838601601f19168801856107bf565b8284528683830101116106675785925f84846101799582602496018386015e830101529150610148565b5f80fd5b60418b634e487b7160e01b5f525260245ffd5b85513d5f823e3d90fd5b9096503d805f833e61069a81836107bf565b8101908381830312610667578051908382116106675701908087830112156106675781516106c7816107f6565b926106d4875194856107bf565b81845285808501928d1b8201019283116106675785809101915b8383106107005750505050955f610117565b82518152918101918691016106ee565b84513d5f823e3d90fd5b99503d805f8c3e61072b818c6107bf565b8a019983818c03126106675780519083821161066757019980878c011215610667578a51610758816107f6565b9b858088519e8f9061076a90826107bf565b84815201928c1b820101928311610667578501905b82821061078f575050505f6100f0565b81518c8116810361066757815290850190850161077f565b8151808f1681036106675781529087019087016100af565b601f909101601f19168101906001600160401b038211908210176107e257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116107e25760051b60200190565b80511561081a5760200190565b634e487b7160e01b5f52603260045260245ffd5b80516001101561081a5760400190565b80516002101561081a5760600190565b80516003101561081a5760800190565b80516004101561081a5760a00190565b80516005101561081a5760c00190565b80516006101561081a5760e00190565b80516007101561081a576101000190565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015610955575f90610918575b60ff9150166012811161090957601203601281116108f557604d81116108f557600a0a90565b634e487b7160e01b5f52601160045260245ffd5b636a78e98160e11b5f5260045ffd5b506020813d60201161094d575b81610932602093836107bf565b81010312610667575160ff811681036106675760ff906108cf565b3d9150610925565b6040513d5f823e3d90fdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146107735750806322acb86714610735578063313ce5671461071a57806347bcac3b1461068a57806354fd4d50146106505780637284e416146104fc5780637fe955d4146104685780639a6fc8f514610421578063af1296d3146103c4578063b9106c8f146102c0578063cd2c9e701461026b5763feaf968c146100a3575f80fd5b34610255575f600319360112610255576100c760246100c0610c6e565b929061091b565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610261575f92610229575b50811561020357670de0b6b3a7640000948581029581870414901517156101d757506101bb8460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026114e9565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d602011610259575b81610245602093836107f4565b810103126102555751905f610161565b5f80fd5b3d9150610238565b84513d5f823e3d90fd5b5034610255575f600319360112610255576102bc906102a97f0000000000000000000000000000000000000000000000000000000000000000611350565b90519182916020835260208301906107c1565b0390f35b509034610255576020918260031936011261025557813573ffffffffffffffffffffffffffffffffffffffff8116809103610255578383918351928380927f313ce5670000000000000000000000000000000000000000000000000000000082525afa80156103ba575f90610382575b60ff9150166012811161035b5760120391601283116101d757604d83116101d757505190600a0a8152f35b827fd4f1d302000000000000000000000000000000000000000000000000000000005f525ffd5b508381813d83116103b3575b61039881836107f4565b81010312610255575160ff811681036102555760ff90610330565b503d61038e565b82513d5f823e3d90fd5b5034610255575f600319360112610255576103dd610c6e565b91805191818301918352805180925260608301916020809201915f5b82811061040d578580868960208301520390f35b8351855293810193928101926001016103f9565b509034610255576020600319360112610255573569ffffffffffffffffffff81160361025557805f60a09251918183528160208401528201525f60608201525f6080820152f35b5034610255575f600319360112610255576104a27f000000000000000000000000000000000000000000000000000000000000000061115b565b908051918291602090602080850191818652845180935285019301915f5b8281106104cf57505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016104c0565b5034610255575f6003193601126102555780515f5f549060018260011c9060018416938415610646575b602097888410861461061a57509187918694938286528386019690815f146105e0575060011461058a575b50505091610566601f92601f199403856107f4565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105ca575050508201018582601f19610551565b80548885018601528795509284019281016105b3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610551565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610526565b5034610255575f60031936011261025557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610255576020806003193601126102555782359267ffffffffffffffff8411610255573660238501121561025557830135926106c784610844565b936106d4845195866107f4565b8085526024602086019160051b8301019136831161025557602401905b82821061070b576020856107048861091b565b9051908152f35b813581529083019083016106f1565b5034610255575f600319360112610255576020905160128152f35b5034610255575f600319360112610255576102bc906102a97f0000000000000000000000000000000000000000000000000000000000000000610eb8565b34610255575f6003193601126102555760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106107e0575050505090565b8351855293810193928101926001016107d2565b90601f601f19910116810190811067ffffffffffffffff82111761081757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116108175760051b60200190565b8051156108695760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600110156108695760400190565b8051600210156108695760600190565b8051600310156108695760800190565b8051600410156108695760a00190565b8051600510156108695760c00190565b8051600610156108695760e00190565b805160071015610869576101000190565b80518210156108695760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061094682610eb8565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c4d575f91610bbb575b50602090610a2c92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906107c1565b5f602483015203915afa968715610bb257505f96610b7e575b5093929190670de0b6b3a7640000945f945b848610610a7b57505050505050670de0b6b3a764000091610a7791611059565b0490565b909192939495610a8b8783610907565b515f8112610b5457610a9d8885610907565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610b29578015610afe57600192610aeb670de0b6b3a764000093610af193610ae38d8a610907565b519104611099565b90611059565b0496019493929190610a57565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610baa575b81610b9a602093836107f4565b810103126102555751945f610a45565b3d9150610b8d565b513d5f823e3d90fd5b90503d805f833e610bcc81836107f4565b81019060209081818403126102555780519067ffffffffffffffff821161025557019180601f84011215610255578251610c0581610844565b93610c128c5195866107f4565b818552838086019260051b820101928311610255578301905b828210610c3e5750505050610a2c6109ea565b81518152908301908301610c2b565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361025557565b7f000000000000000000000000000000000000000000000000000000000000000090610c998261115b565b90610ca383611350565b91610cad84610844565b604094610cbd60405192836107f4565b808252610cc981610844565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610d0d5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610d338a84610907565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610e7d575f925f94610e25575b5050610d8e610d888d88610907565b516114e9565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610df95781840514901517156101d757509060019291610dda8c8b610907565b5280821015610df257505b9801959493929190610cfd565b9050610de5565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610e76575b610e3e81836107f4565b8101031261025557610e4f81610c57565b9187820151918781015192610e6b608060608401519301610c57565b94509250925f610d79565b503d610e34565b87513d5f823e3d90fd5b90610e9182610844565b610e9e60405191826107f4565b828152601f19610eae8294610844565b0190602036910137565b610ec181610e87565b907f0000000000000000000000000000000000000000000000000000000000000000610eec8361085c565b527f0000000000000000000000000000000000000000000000000000000000000000610f1783610896565b526002811115611055577f0000000000000000000000000000000000000000000000000000000000000000610f4b836108a6565b526003811115611055577f0000000000000000000000000000000000000000000000000000000000000000610f7f836108b6565b526004811115611055577f0000000000000000000000000000000000000000000000000000000000000000610fb3836108c6565b526005811115611055577f0000000000000000000000000000000000000000000000000000000000000000610fe7836108d6565b526006811115611055576007907f000000000000000000000000000000000000000000000000000000000000000061101e846108e6565b52116110275790565b7f0000000000000000000000000000000000000000000000000000000000000000611051826108f6565b5290565b5090565b8181029291811591840414171561106c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a7640000918083036110b05750905090565b8290671bc16d674ec8000081036110cd57505080610a7791611059565b673782dace9d90000081036110f157506110ea82610a7793611059565b0480611059565b90506110fc9161158f565b61271080820290828204148215171561106c5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93848301040190151502906001820180831161106c57811015611156575050505f90565b030190565b61116481610844565b9061117260405192836107f4565b808252601f1961118182610844565b013660208401376111918261085c565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526111d683610896565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561134b5761120d836108a6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561134b57611244836108b6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561134b5761127b836108c6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561134b576112b2836108d6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561134b576007906112ec846108e6565b837f00000000000000000000000000000000000000000000000000000000000000001690521161131a575090565b611323826108f6565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61135981610e87565b907f00000000000000000000000000000000000000000000000000000000000000006113848361085c565b527f00000000000000000000000000000000000000000000000000000000000000006113af83610896565b526002811115611055577f00000000000000000000000000000000000000000000000000000000000000006113e3836108a6565b526003811115611055577f0000000000000000000000000000000000000000000000000000000000000000611417836108b6565b526004811115611055577f000000000000000000000000000000000000000000000000000000000000000061144b836108c6565b526005811115611055577f000000000000000000000000000000000000000000000000000000000000000061147f836108d6565b526006811115611055576007907f00000000000000000000000000000000000000000000000000000000000000006114b6846108e6565b52116114bf5790565b7f0000000000000000000000000000000000000000000000000000000000000000611051826108f6565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116115135790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611558576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611558570590565b908015611ebb578115611eb5578160ff1c611e8d57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611e655781670c7d713b49da00001280611e54575b15611af157670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611628908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611585565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580611ade575b15611ab657819082121580611aa3575b15611a7b575f915f8112611a6c575b506064906806f05b59d3b20000008112611a09577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156119d0575b6856bc75e2d631000000811215611996575b682b5e3af16b1880000081121561195e575b6815af1d78b58c400000811215611926575b680ad78ebc5ac62000008112156118ef575b828112156118b8575b6802b5e3af16b1880000811215611881575b68015af1d78b58c4000081121561184a575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611847576118479061153e565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906117c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906117b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906117a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061179b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590611789565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611777565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611765565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611753565b6803782dace9d90000008112611a59577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261173e565b68056bc75e2d631000008260019261173e565b600192505f03905060646116e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156116d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156116c3565b81670de0b6b3a7640000925f91848112611e3e575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611e13575b73011798004d755d3c8bc8e03204cf44619e000000821215611df2575b820290808302906e01855144814a7ff805980ff00840009081831215611dcf575b50506b02df0ab5a80a22c61ab5a70080821215611daf575b50693f1fce3da636ea5cf85080821215611d8f575b50690127fa27722cc06cc5e280821215611d6f575b5068280e60114edb805d0380821215611d4f575b50680ebc5fb4174612111080821215611d38575b506808f00f760a4b2db55d80821215611d18575b506806f5f177578893793780821215611cf8575b506806248f33704b28660380821215611cd9575b506805c548670b9510e7ac80821215611cba575b50611c6768056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611585565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611cb5575f035b02611697565b611caf565b68056bc75e2d631000006756bc75e2d63100009202059101905f611c2b565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611c17565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611c03565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611bef565b68056bc75e2d63100000809202059101905f611bdb565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611bc7565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611bb3565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611b9e565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611b89565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611b71565b906b1425982cf597cd205cef73806803782dace9d900000091059101611b50565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611b33565b9050611e4a915061153e565b6001906064611b06565b50670f43fc2c04ee000082126115d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea264697066735822122015e49a56c787202970a9bfe333ac83010d0aec893ad0cf8201712b16072cbc8b64736f6c634300081b0033","opcodes":"PUSH2 0x400 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x667 JUMPI PUSH2 0x2860 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x80 DUP3 DUP3 SUB SLT PUSH2 0x667 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP3 AND SWAP2 DUP3 DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0x20 SWAP6 DUP7 DUP4 ADD MLOAD SWAP7 DUP7 DUP9 AND SWAP8 DUP9 DUP2 SUB PUSH2 0x667 JUMPI DUP5 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x667 JUMPI DUP7 ADD SWAP5 PUSH1 0x1F SWAP7 DUP10 DUP9 DUP9 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP7 MLOAD SWAP10 PUSH2 0x87 DUP12 PUSH2 0x7F6 JUMP JUMPDEST SWAP8 PUSH2 0x94 DUP9 MLOAD SWAP10 DUP11 PUSH2 0x7BF JUMP JUMPDEST DUP12 DUP10 MSTORE DUP7 DUP10 ADD SWAP1 DUP8 PUSH1 0x5 SWAP14 DUP15 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP8 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7A7 JUMPI POP POP POP PUSH1 0x60 ADD MLOAD PUSH1 0xC0 MSTORE PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP3 MLOAD SWAP9 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP11 MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x4 SWAP11 DUP6 DUP13 DUP4 ADD MSTORE GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP11 PUSH2 0x71A JUMPI JUMPDEST POP SWAP9 PUSH0 DUP8 SWAP9 SWAP10 SWAP11 DUP6 MLOAD SWAP9 DUP10 DUP1 SWAP3 PUSH4 0xF89F27ED PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x710 JUMPI PUSH0 SWAP8 PUSH2 0x688 JUMPI JUMPDEST POP MLOAD SWAP5 DUP6 PUSH1 0xE0 MSTORE DUP8 PUSH0 DUP12 PUSH1 0xA0 MLOAD AND DUP7 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x95D89B41 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x67E JUMPI SWAP1 DUP5 SWAP2 PUSH0 SWAP2 PUSH2 0x5EB JUMPI JUMPDEST POP PUSH1 0x24 PUSH2 0x179 SWAP2 DUP8 MLOAD SWAP4 DUP2 DUP6 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP10 DUP5 ADD MCOPY DUP2 ADD PUSH4 0xBD554D1 PUSH1 0xE2 SHL DUP9 DUP3 ADD MSTORE SUB DUP12 DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP1 MLOAD SWAP3 DUP4 GT PUSH2 0x5D8 JUMPI PUSH0 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP6 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x5CE JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x5BB JUMPI DUP4 DUP2 GT PUSH2 0x579 JUMPI JUMPDEST POP DUP1 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x517 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x50C JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP2 MLOAD DUP4 SUB PUSH2 0x4FE JUMPI DUP7 PUSH2 0x1E2 DUP4 PUSH2 0x80D JUMP JUMPDEST MLOAD AND SWAP2 PUSH2 0x200 SWAP3 DUP4 MSTORE PUSH2 0x1F4 DUP6 PUSH2 0x80D JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x100 SWAP9 DUP10 MSTORE PUSH2 0x210 DUP2 PUSH2 0x209 DUP5 PUSH2 0x80D JUMP JUMPDEST MLOAD AND PUSH2 0x89F JUMP JUMPDEST SWAP6 PUSH2 0x300 SWAP7 DUP8 MSTORE PUSH1 0x7 DUP3 PUSH2 0x223 DUP6 PUSH2 0x82E JUMP JUMPDEST MLOAD AND SWAP7 PUSH2 0x220 SWAP8 DUP9 MSTORE PUSH2 0x235 DUP4 PUSH2 0x82E JUMP JUMPDEST MLOAD SWAP11 PUSH2 0x120 SWAP12 DUP13 MSTORE PUSH2 0x24A DUP6 PUSH2 0x209 DUP9 PUSH2 0x82E JUMP JUMPDEST SWAP11 PUSH2 0x320 SWAP12 DUP13 MSTORE PUSH1 0x2 DUP4 GT PUSH2 0x4CA JUMPI JUMPDEST PUSH1 0x3 DUP4 GT PUSH2 0x496 JUMPI JUMPDEST DUP3 GT PUSH2 0x462 JUMPI JUMPDEST DUP2 GT PUSH2 0x42E JUMPI JUMPDEST PUSH1 0x6 DUP2 GT PUSH2 0x3FA JUMPI JUMPDEST GT PUSH2 0x3C4 JUMPI JUMPDEST POP POP POP MLOAD SWAP5 PUSH2 0x1EFF SWAP7 DUP8 PUSH2 0x961 DUP9 CODECOPY PUSH1 0x80 MLOAD DUP8 DUP2 DUP2 PUSH2 0x131 ADD MSTORE PUSH2 0x9BA ADD MSTORE PUSH1 0xA0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x10B ADD MSTORE DUP2 DUP2 PUSH2 0x79D ADD MSTORE PUSH2 0x95F ADD MSTORE PUSH1 0xC0 MLOAD DUP8 PUSH2 0x667 ADD MSTORE PUSH1 0xE0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x285 ADD MSTORE DUP2 DUP2 PUSH2 0x47E ADD MSTORE DUP2 DUP2 PUSH2 0x74F ADD MSTORE DUP2 DUP2 PUSH2 0x91D ADD MSTORE PUSH2 0xC70 ADD MSTORE MLOAD DUP7 PUSH2 0xEC4 ADD MSTORE MLOAD DUP6 PUSH2 0xEEF ADD MSTORE PUSH2 0x140 MLOAD DUP6 PUSH2 0xF23 ADD MSTORE PUSH2 0x160 MLOAD DUP6 PUSH2 0xF57 ADD MSTORE PUSH2 0x180 MLOAD DUP6 PUSH2 0xF8B ADD MSTORE PUSH2 0x1A0 MLOAD DUP6 PUSH2 0xFBF ADD MSTORE PUSH2 0x1C0 MLOAD DUP6 PUSH2 0xFF6 ADD MSTORE PUSH2 0x1E0 MLOAD DUP6 PUSH2 0x1029 ADD MSTORE MLOAD DUP5 PUSH2 0x11AB ADD MSTORE MLOAD DUP4 PUSH2 0x11D8 ADD MSTORE PUSH2 0x240 MLOAD DUP4 PUSH2 0x120F ADD MSTORE PUSH2 0x260 MLOAD DUP4 PUSH2 0x1246 ADD MSTORE PUSH2 0x280 MLOAD DUP4 PUSH2 0x127D ADD MSTORE PUSH2 0x2A0 MLOAD DUP4 PUSH2 0x12B4 ADD MSTORE PUSH2 0x2C0 MLOAD DUP4 PUSH2 0x12EF ADD MSTORE PUSH2 0x2E0 MLOAD DUP4 PUSH2 0x1326 ADD MSTORE MLOAD DUP3 PUSH2 0x135C ADD MSTORE MLOAD DUP2 PUSH2 0x1387 ADD MSTORE PUSH2 0x340 MLOAD DUP2 PUSH2 0x13BB ADD MSTORE PUSH2 0x360 MLOAD DUP2 PUSH2 0x13EF ADD MSTORE PUSH2 0x380 MLOAD DUP2 PUSH2 0x1423 ADD MSTORE PUSH2 0x3A0 MLOAD DUP2 PUSH2 0x1457 ADD MSTORE PUSH2 0x3C0 MLOAD DUP2 PUSH2 0x148E ADD MSTORE PUSH2 0x3E0 MLOAD DUP2 PUSH2 0x14C1 ADD MSTORE RETURN JUMPDEST DUP3 PUSH2 0x3E4 PUSH2 0x209 SWAP3 DUP5 PUSH2 0x3D9 PUSH2 0x3EE SWAP8 PUSH2 0x88E JUMP JUMPDEST MLOAD AND PUSH2 0x2E0 MSTORE PUSH2 0x88E JUMP JUMPDEST MLOAD PUSH2 0x1E0 MSTORE PUSH2 0x88E JUMP JUMPDEST PUSH2 0x3E0 MSTORE PUSH0 DUP1 DUP1 PUSH2 0x280 JUMP JUMPDEST DUP4 PUSH2 0x404 DUP7 PUSH2 0x87E JUMP JUMPDEST MLOAD AND PUSH2 0x2C0 MSTORE PUSH2 0x413 DUP4 PUSH2 0x87E JUMP JUMPDEST MLOAD PUSH2 0x1C0 MSTORE PUSH2 0x425 DUP5 PUSH2 0x209 DUP8 PUSH2 0x87E JUMP JUMPDEST PUSH2 0x3C0 MSTORE PUSH2 0x27A JUMP JUMPDEST DUP4 PUSH2 0x438 DUP7 PUSH2 0x86E JUMP JUMPDEST MLOAD AND PUSH2 0x2A0 MSTORE PUSH2 0x447 DUP4 PUSH2 0x86E JUMP JUMPDEST MLOAD PUSH2 0x1A0 MSTORE PUSH2 0x459 DUP5 PUSH2 0x209 DUP8 PUSH2 0x86E JUMP JUMPDEST PUSH2 0x3A0 MSTORE PUSH2 0x271 JUMP JUMPDEST DUP5 PUSH2 0x46C DUP8 PUSH2 0x85E JUMP JUMPDEST MLOAD AND PUSH2 0x280 MSTORE PUSH2 0x47B DUP5 PUSH2 0x85E JUMP JUMPDEST MLOAD PUSH2 0x180 MSTORE PUSH2 0x48D DUP6 PUSH2 0x209 DUP9 PUSH2 0x85E JUMP JUMPDEST PUSH2 0x380 MSTORE PUSH2 0x26A JUMP JUMPDEST DUP6 PUSH2 0x4A0 DUP9 PUSH2 0x84E JUMP JUMPDEST MLOAD AND PUSH2 0x260 MSTORE PUSH2 0x4AF DUP6 PUSH2 0x84E JUMP JUMPDEST MLOAD PUSH2 0x160 MSTORE PUSH2 0x4C1 DUP7 PUSH2 0x209 DUP10 PUSH2 0x84E JUMP JUMPDEST PUSH2 0x360 MSTORE PUSH2 0x263 JUMP JUMPDEST DUP6 PUSH2 0x4D4 DUP9 PUSH2 0x83E JUMP JUMPDEST MLOAD AND PUSH2 0x240 MSTORE PUSH2 0x4E3 DUP6 PUSH2 0x83E JUMP JUMPDEST MLOAD PUSH2 0x140 MSTORE PUSH2 0x4F5 DUP7 PUSH2 0x209 DUP10 PUSH2 0x83E JUMP JUMPDEST PUSH2 0x340 MSTORE PUSH2 0x25A JUMP JUMPDEST DUP5 PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x1BF JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x55F JUMPI POP POP POP LT PUSH2 0x547 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x1D0 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x53A JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x529 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP14 DUP2 DUP9 ADD SWAP1 SHR DUP3 ADD SWAP3 DUP5 DUP9 LT PUSH2 0x5B2 JUMPI JUMPDEST ADD DUP14 SHR ADD SWAP1 DUP7 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x5A7 JUMPI POP POP PUSH2 0x1A5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP7 SWAP1 PUSH2 0x599 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x591 JUMP JUMPDEST PUSH1 0x22 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x195 JUMP JUMPDEST PUSH1 0x41 DUP10 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5FD DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP5 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x667 JUMPI ADD DUP2 DUP4 DUP3 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x66B JUMPI DUP7 MLOAD SWAP3 PUSH2 0x63D DUP4 DUP7 ADD PUSH1 0x1F NOT AND DUP9 ADD DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP3 DUP5 MSTORE DUP7 DUP4 DUP4 ADD ADD GT PUSH2 0x667 JUMPI DUP6 SWAP3 PUSH0 DUP5 DUP5 PUSH2 0x179 SWAP6 DUP3 PUSH1 0x24 SWAP7 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP2 POP PUSH2 0x148 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x69A DUP2 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP1 DUP1 DUP8 DUP4 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP2 MLOAD PUSH2 0x6C7 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP3 PUSH2 0x6D4 DUP8 MLOAD SWAP5 DUP6 PUSH2 0x7BF JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 DUP14 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 DUP1 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x700 JUMPI POP POP POP POP SWAP6 PUSH0 PUSH2 0x117 JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP7 SWAP2 ADD PUSH2 0x6EE JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP RETURNDATASIZE DUP1 PUSH0 DUP13 RETURNDATACOPY PUSH2 0x72B DUP2 DUP13 PUSH2 0x7BF JUMP JUMPDEST DUP11 ADD SWAP10 DUP4 DUP2 DUP13 SUB SLT PUSH2 0x667 JUMPI DUP1 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x667 JUMPI ADD SWAP10 DUP1 DUP8 DUP13 ADD SLT ISZERO PUSH2 0x667 JUMPI DUP11 MLOAD PUSH2 0x758 DUP2 PUSH2 0x7F6 JUMP JUMPDEST SWAP12 DUP6 DUP1 DUP9 MLOAD SWAP15 DUP16 SWAP1 PUSH2 0x76A SWAP1 DUP3 PUSH2 0x7BF JUMP JUMPDEST DUP5 DUP2 MSTORE ADD SWAP3 DUP13 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x667 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x78F JUMPI POP POP POP PUSH0 PUSH2 0xF0 JUMP JUMPDEST DUP2 MLOAD DUP13 DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST DUP2 MLOAD DUP1 DUP16 AND DUP2 SUB PUSH2 0x667 JUMPI DUP2 MSTORE SWAP1 DUP8 ADD SWAP1 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x7E2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x7E2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x81A JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x81A JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x81A JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 PUSH1 0x20 SWAP1 DUP3 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x955 JUMPI PUSH0 SWAP1 PUSH2 0x918 JUMPI JUMPDEST PUSH1 0xFF SWAP2 POP AND PUSH1 0x12 DUP2 GT PUSH2 0x909 JUMPI PUSH1 0x12 SUB PUSH1 0x12 DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0x4D DUP2 GT PUSH2 0x8F5 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x6A78E981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x94D JUMPI JUMPDEST DUP2 PUSH2 0x932 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7BF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x667 JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x667 JUMPI PUSH1 0xFF SWAP1 PUSH2 0x8CF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x925 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16F0115B EQ PUSH2 0x773 JUMPI POP DUP1 PUSH4 0x22ACB867 EQ PUSH2 0x735 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x71A JUMPI DUP1 PUSH4 0x47BCAC3B EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x4FC JUMPI DUP1 PUSH4 0x7FE955D4 EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0xAF1296D3 EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0xB9106C8F EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xCD2C9E70 EQ PUSH2 0x26B JUMPI PUSH4 0xFEAF968C EQ PUSH2 0xA3 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0xC7 PUSH1 0x24 PUSH2 0xC0 PUSH2 0xC6E JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x91B JUMP JUMPDEST SWAP4 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP1 PUSH32 0x0 AND DUP7 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x261 JUMPI PUSH0 SWAP3 PUSH2 0x229 JUMPI JUMPDEST POP DUP2 ISZERO PUSH2 0x203 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1D7 JUMPI POP PUSH2 0x1BB DUP5 PUSH1 0x1 PUSH0 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 SWAP9 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x14E9 JUMP JUMPDEST SWAP3 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x259 JUMPI JUMPDEST DUP2 PUSH2 0x245 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x161 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x238 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x2BC SWAP1 PUSH2 0x2A9 PUSH32 0x0 PUSH2 0x1350 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x7C1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x255 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x255 JUMPI DUP4 DUP4 SWAP2 DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x3BA JUMPI PUSH0 SWAP1 PUSH2 0x382 JUMPI JUMPDEST PUSH1 0xFF SWAP2 POP AND PUSH1 0x12 DUP2 GT PUSH2 0x35B JUMPI PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x1D7 JUMPI PUSH1 0x4D DUP4 GT PUSH2 0x1D7 JUMPI POP MLOAD SWAP1 PUSH1 0xA EXP DUP2 MSTORE RETURN JUMPDEST DUP3 PUSH32 0xD4F1D30200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3B3 JUMPI JUMPDEST PUSH2 0x398 DUP2 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x255 JUMPI PUSH1 0xFF SWAP1 PUSH2 0x330 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x38E JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x3DD PUSH2 0xC6E JUMP JUMPDEST SWAP2 DUP1 MLOAD SWAP2 DUP2 DUP4 ADD SWAP2 DUP4 MSTORE DUP1 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD SWAP2 PUSH1 0x20 DUP1 SWAP3 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x40D JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3F9 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x255 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0x255 JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x4A2 PUSH32 0x0 PUSH2 0x115B JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4CF JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4C0 JUMP JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x646 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x61A JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x5E0 JUMPI POP PUSH1 0x1 EQ PUSH2 0x58A JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x566 PUSH1 0x1F SWAP3 PUSH1 0x1F NOT SWAP5 SUB DUP6 PUSH2 0x7F4 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x5CA JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x551 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x5B3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x551 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x526 JUMP JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI DUP3 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x255 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x255 JUMPI DUP4 ADD CALLDATALOAD SWAP3 PUSH2 0x6C7 DUP5 PUSH2 0x844 JUMP JUMPDEST SWAP4 PUSH2 0x6D4 DUP5 MLOAD SWAP6 DUP7 PUSH2 0x7F4 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x255 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x70B JUMPI PUSH1 0x20 DUP6 PUSH2 0x704 DUP9 PUSH2 0x91B JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x6F1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x2BC SWAP1 PUSH2 0x2A9 PUSH32 0x0 PUSH2 0xEB8 JUMP JUMPDEST CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x7E0 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x7D2 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x817 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x817 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x869 JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x869 JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x946 DUP3 PUSH2 0xEB8 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x40 SWAP5 DUP6 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 SWAP3 DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP2 SWAP9 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC4D JUMPI PUSH0 SWAP2 PUSH2 0xBBB JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH2 0xA2C SWAP3 DUP10 MLOAD DUP1 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x7C1 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP2 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xBB2 JUMPI POP PUSH0 SWAP7 PUSH2 0xB7E JUMPI JUMPDEST POP SWAP4 SWAP3 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH0 SWAP5 JUMPDEST DUP5 DUP7 LT PUSH2 0xA7B JUMPI POP POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0xA77 SWAP2 PUSH2 0x1059 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0xA8B DUP8 DUP4 PUSH2 0x907 JUMP JUMPDEST MLOAD PUSH0 DUP2 SLT PUSH2 0xB54 JUMPI PUSH2 0xA9D DUP9 DUP6 PUSH2 0x907 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH8 0xDE0B6B3A7640000 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB29 JUMPI DUP1 ISZERO PUSH2 0xAFE JUMPI PUSH1 0x1 SWAP3 PUSH2 0xAEB PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0xAF1 SWAP4 PUSH2 0xAE3 DUP14 DUP11 PUSH2 0x907 JUMP JUMPDEST MLOAD SWAP2 DIV PUSH2 0x1099 JUMP JUMPDEST SWAP1 PUSH2 0x1059 JUMP JUMPDEST DIV SWAP7 ADD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA57 JUMP JUMPDEST DUP7 PUSH1 0x12 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 SWAP1 DUP6 PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP6 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xBAA JUMPI JUMPDEST DUP2 PUSH2 0xB9A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI MLOAD SWAP5 PUSH0 PUSH2 0xA45 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xB8D JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xBCC DUP2 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x255 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x255 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x255 JUMPI DUP3 MLOAD PUSH2 0xC05 DUP2 PUSH2 0x844 JUMP JUMPDEST SWAP4 PUSH2 0xC12 DUP13 MLOAD SWAP6 DUP7 PUSH2 0x7F4 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x255 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC3E JUMPI POP POP POP POP PUSH2 0xA2C PUSH2 0x9EA JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xC2B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x255 JUMPI JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0xC99 DUP3 PUSH2 0x115B JUMP JUMPDEST SWAP1 PUSH2 0xCA3 DUP4 PUSH2 0x1350 JUMP JUMPDEST SWAP2 PUSH2 0xCAD DUP5 PUSH2 0x844 JUMP JUMPDEST PUSH1 0x40 SWAP5 PUSH2 0xCBD PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0xCC9 DUP2 PUSH2 0x844 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP6 JUMPDEST DUP5 DUP8 LT PUSH2 0xD0D JUMPI POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD33 DUP11 DUP5 PUSH2 0x907 JUMP JUMPDEST MLOAD AND DUP5 MLOAD DUP1 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0xA0 SWAP3 DUP4 SWAP2 PUSH1 0x4 SWAP4 DUP5 SWAP2 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE7D JUMPI PUSH0 SWAP3 PUSH0 SWAP5 PUSH2 0xE25 JUMPI JUMPDEST POP POP PUSH2 0xD8E PUSH2 0xD88 DUP14 DUP9 PUSH2 0x907 JUMP JUMPDEST MLOAD PUSH2 0x14E9 JUMP JUMPDEST SWAP2 DUP3 DUP2 MUL SWAP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH0 DUP4 SLT AND PUSH2 0xDF9 JUMPI DUP2 DUP5 SDIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1D7 JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH2 0xDDA DUP13 DUP12 PUSH2 0x907 JUMP JUMPDEST MSTORE DUP1 DUP3 LT ISZERO PUSH2 0xDF2 JUMPI POP JUMPDEST SWAP9 ADD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCFD JUMP JUMPDEST SWAP1 POP PUSH2 0xDE5 JUMP JUMPDEST PUSH1 0x11 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 SWAP5 POP DUP2 SWAP4 POP RETURNDATASIZE DUP4 GT PUSH2 0xE76 JUMPI JUMPDEST PUSH2 0xE3E DUP2 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI PUSH2 0xE4F DUP2 PUSH2 0xC57 JUMP JUMPDEST SWAP2 DUP8 DUP3 ADD MLOAD SWAP2 DUP8 DUP2 ADD MLOAD SWAP3 PUSH2 0xE6B PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0xC57 JUMP JUMPDEST SWAP5 POP SWAP3 POP SWAP3 PUSH0 PUSH2 0xD79 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE34 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0xE91 DUP3 PUSH2 0x844 JUMP JUMPDEST PUSH2 0xE9E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x7F4 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xEAE DUP3 SWAP5 PUSH2 0x844 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH2 0xEC1 DUP2 PUSH2 0xE87 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xEEC DUP4 PUSH2 0x85C JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0xF17 DUP4 PUSH2 0x896 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xF4B DUP4 PUSH2 0x8A6 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xF7F DUP4 PUSH2 0x8B6 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xFB3 DUP4 PUSH2 0x8C6 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xFE7 DUP4 PUSH2 0x8D6 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x101E DUP5 PUSH2 0x8E6 JUMP JUMPDEST MSTORE GT PUSH2 0x1027 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x1051 DUP3 PUSH2 0x8F6 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x106C JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x10B0 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x10CD JUMPI POP POP DUP1 PUSH2 0xA77 SWAP2 PUSH2 0x1059 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x10F1 JUMPI POP PUSH2 0x10EA DUP3 PUSH2 0xA77 SWAP4 PUSH2 0x1059 JUMP JUMPDEST DIV DUP1 PUSH2 0x1059 JUMP JUMPDEST SWAP1 POP PUSH2 0x10FC SWAP2 PUSH2 0x158F JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x106C JUMPI PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x106C JUMPI DUP2 LT ISZERO PUSH2 0x1156 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST PUSH2 0x1164 DUP2 PUSH2 0x844 JUMP JUMPDEST SWAP1 PUSH2 0x1172 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1F NOT PUSH2 0x1181 DUP3 PUSH2 0x844 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH2 0x1191 DUP3 PUSH2 0x85C JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP1 MSTORE PUSH2 0x11D6 DUP4 PUSH2 0x896 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x120D DUP4 PUSH2 0x8A6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x1244 DUP4 PUSH2 0x8B6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x127B DUP4 PUSH2 0x8C6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x12B2 DUP4 PUSH2 0x8D6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH1 0x7 SWAP1 PUSH2 0x12EC DUP5 PUSH2 0x8E6 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP1 MSTORE GT PUSH2 0x131A JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x1323 DUP3 PUSH2 0x8F6 JUMP JUMPDEST SWAP1 PUSH32 0x0 AND SWAP1 MSTORE SWAP1 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1359 DUP2 PUSH2 0xE87 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1384 DUP4 PUSH2 0x85C JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x13AF DUP4 PUSH2 0x896 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x13E3 DUP4 PUSH2 0x8A6 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x1417 DUP4 PUSH2 0x8B6 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x144B DUP4 PUSH2 0x8C6 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x147F DUP4 PUSH2 0x8D6 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x14B6 DUP5 PUSH2 0x8E6 JUMP JUMPDEST MSTORE GT PUSH2 0x14BF JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x1051 DUP3 PUSH2 0x8F6 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1513 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1558 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x1558 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1EBB JUMPI DUP2 ISZERO PUSH2 0x1EB5 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1E8D JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1E65 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1E54 JUMPI JUMPDEST ISZERO PUSH2 0x1AF1 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1628 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x1585 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x1ADE JUMPI JUMPDEST ISZERO PUSH2 0x1AB6 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x1AA3 JUMPI JUMPDEST ISZERO PUSH2 0x1A7B JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x1A6C JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x1A09 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x19D0 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x1996 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x195E JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1926 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x18EF JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x18B8 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x1881 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x184A JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x1847 JUMPI PUSH2 0x1847 SWAP1 PUSH2 0x153E JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x17C8 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x17B6 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x17A4 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x179B JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1789 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1777 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1765 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x1753 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x1A59 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x173E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x173E JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x16E2 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x16D3 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x16C3 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1E3E JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1E13 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1DF2 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1DCF JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1DAF JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1D8F JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1D6F JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1D4F JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1D38 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1D18 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1CF8 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1CD9 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1CBA JUMPI JUMPDEST POP PUSH2 0x1C67 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x1585 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1CB5 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x1697 JUMP JUMPDEST PUSH2 0x1CAF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1C2B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1C17 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1C03 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BEF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BDB JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BC7 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BB3 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B9E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B89 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1B71 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1B50 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1B33 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E4A SWAP2 POP PUSH2 0x153E JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x1B06 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x15D5 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xE4 SWAP11 JUMP 0xC7 DUP8 KECCAK256 0x29 PUSH17 0xA9BFE333AC83010D0AEC893AD0CF820171 0x2B AND SMOD 0x2C 0xBC DUP12 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"436:492:78:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2864:19:72;;436:492:78;2893:15:72;2918:12;;436:492:78;;;;;;2966:36:72;;-1:-1:-1;2966:36:72;436:492:78;2966:36:72;;;;;;;436:492:78;2966:36:72;;;;;;;-1:-1:-1;2966:36:72;;;436:492:78;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;3039:28:72;;;;;;;;;-1:-1:-1;3039:28:72;;;436:492:78;;;3120:26:72;;436:492:78;3120:26:72;436:492:78;-1:-1:-1;436:492:78;2918:12:72;436:492:78;;;;;;;;;;;3185:38:72;;;;;;;;;;;;-1:-1:-1;3185:38:72;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;436:492:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;1500:6:35;;1496:65;;3371:8:72;;;;:::i;:::-;436:492:78;;3357:22:72;;;;;3404:10;;;:::i;:::-;436:492:78;3393:21:72;;;;;3462:47;3500:8;;;;:::i;:::-;436:492:78;;3462:47:72;:::i;:::-;3428:81;;;;;4854:1;3538:8;;;;:::i;:::-;436:492:78;;3524:22:72;;;;;3571:10;;;:::i;:::-;436:492:78;3560:21:72;;;;;3629:47;3667:8;;;;:::i;3629:47::-;3595:81;;;;;3717:1;3703:15;;3699:215;;436:492:78;3945:1:72;3931:15;;3927:215;;436:492:78;4159:15:72;;4155:214;;436:492:78;4386:15:72;;4382:214;;436:492:78;4627:1:72;4613:15;;4609:214;;436:492:78;4840:15:72;4836:214;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;2918:12:72;436:492:78;;;;;;;;;;;;;;;2864:19:72;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4836:214:72;4889:8;4926:10;5026:8;4889;;;4988:47;4889:8;;:::i;:::-;436:492:78;;4875:22:72;;4926:10;:::i;:::-;436:492:78;4915:21:72;;5026:8;:::i;4988:47::-;4954:81;;4836:214;;;;;4609;4662:8;;;;:::i;:::-;436:492:78;;4648:22:72;;4699:10;;;:::i;:::-;436:492:78;4688:21:72;;4761:47;4799:8;;;;:::i;4761:47::-;4727:81;;4609:214;;4382;4435:8;;;;:::i;:::-;436:492:78;;4421:22:72;;4472:10;;;:::i;:::-;436:492:78;4461:21:72;;4534:47;4572:8;;;;:::i;4534:47::-;4500:81;;4382:214;;4155;4208:8;;;;:::i;:::-;436:492:78;;4194:22:72;;4245:10;;;:::i;:::-;436:492:78;4234:21:72;;4307:47;4345:8;;;;:::i;4307:47::-;4273:81;;4155:214;;3927:215;3981:8;;;;:::i;:::-;436:492:78;;3967:22:72;;4018:10;;;:::i;:::-;436:492:78;4007:21:72;;4080:47;4118:8;;;;:::i;4080:47::-;4046:81;;3927:215;;3699;3753:8;;;;:::i;:::-;436:492:78;;3739:22:72;;3790:10;;;:::i;:::-;436:492:78;3779:21:72;;3852:47;3890:8;;;;:::i;3852:47::-;3818:81;;3699:215;;1496:65:35;1529:21;;;;-1:-1:-1;1529:21:35;-1:-1:-1;1529:21:35;436:492:78;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;-1:-1:-1;436:492:78;;;-1:-1:-1;436:492:78;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;-1:-1:-1;436:492:78;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;-1:-1:-1;436:492:78;3185:38:72;;;;;;-1:-1:-1;3185:38:72;;;;;;:::i;:::-;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;3185:38:72;;;;436:492:78;-1:-1:-1;436:492:78;;;;;;;;-1:-1:-1;436:492:78;;;-1:-1:-1;436:492:78;3185:38:72;436:492:78;;;-1:-1:-1;436:492:78;;;;;3039:28:72;;;;;;-1:-1:-1;3039:28:72;;;;;;:::i;:::-;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:28:72;;;;;;;;436:492:78;;;;;;;;;;;;;;3039:28:72;436:492:78;;;-1:-1:-1;436:492:78;;;;;2966:36:72;;;;;-1:-1:-1;2966:36:72;;;;;;:::i;:::-;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2966:36:72;;;-1:-1:-1;2966:36:72;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;-1:-1:-1;;;;;436:492:78;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;436:492:78;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;2966:36:72;436:492:78;;;;;2966:36:72;436:492:78;;;;;;;;;;;;:::o;:::-;;;3717:1:72;436:492:78;;;;;;;:::o;:::-;;;3945:1:72;436:492:78;;;;;;;:::o;:::-;;;2966:36:72;436:492:78;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;4627:1:72;436:492:78;;;;;;;:::o;:::-;;;4854:1:72;436:492:78;;;;;;;:::o;11521:313:72:-;436:492:78;;-1:-1:-1;;;11661:15:72;;436:492:78;11661:15:72;;436:492:78;;11661:15:72;;436:492:78;;-1:-1:-1;;;;;436:492:78;11661:15:72;;;;;;;;;;11521:313;436:492:78;;;;1234:2:72;11691:28;;11687:87;;1234:2;;;;;;;;;;;;;;11521:313;:::o;1234:2::-;436:492:78;;;11661:15:72;1234:2;;11661:15;1234:2;;11661:15;1234:2;11687:87;11742:21;;;11661:15;11742:21;11661:15;;11742:21;11661:15;;;;;;;;;;;;;;;;:::i;:::-;;;436:492:78;;;;;;;;;;;;;11661:15:72;;;;;;-1:-1:-1;11661:15:72;;;436:492:78;;;11661:15:72;436:492:78;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_uint80_fromMemory":{"entryPoint":3159,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":1985,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":3719,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_int256_dyn":{"entryPoint":2116,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256":{"entryPoint":4185,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2036,"id":null,"parameterSlots":2,"returnSlots":0},"fun_calculateTVL":{"entryPoint":2331,"id":17151,"parameterSlots":1,"returnSlots":1},"fun_getFeedData":{"entryPoint":3182,"id":17242,"parameterSlots":0,"returnSlots":2},"fun_getFeedTokenDecimalScalingFactors":{"entryPoint":4944,"id":17543,"parameterSlots":1,"returnSlots":1},"fun_getFeeds":{"entryPoint":4443,"id":17427,"parameterSlots":1,"returnSlots":1},"fun_getWeights":{"entryPoint":3768,"id":17659,"parameterSlots":1,"returnSlots":1},"fun_pow":{"entryPoint":5519,"id":5180,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":4249,"id":4843,"parameterSlots":2,"returnSlots":1},"fun_toInt256":{"entryPoint":5353,"id":12025,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn":{"entryPoint":2311,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_int256_dyn_12043":{"entryPoint":2140,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12044":{"entryPoint":2198,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12045":{"entryPoint":2214,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12046":{"entryPoint":2230,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12047":{"entryPoint":2246,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12048":{"entryPoint":2262,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12049":{"entryPoint":2278,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_int256_dyn_12050":{"entryPoint":2294,"id":null,"parameterSlots":1,"returnSlots":1},"wrapping_div_int256":{"entryPoint":5509,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_12068":{"entryPoint":5438,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"16611":[{"length":32,"start":305},{"length":32,"start":2490}],"16614":[{"length":32,"start":267},{"length":32,"start":1949},{"length":32,"start":2399}],"16616":[{"length":32,"start":1639}],"16618":[{"length":32,"start":645},{"length":32,"start":1150},{"length":32,"start":1871},{"length":32,"start":2333},{"length":32,"start":3184}],"16622":[{"length":32,"start":3780}],"16624":[{"length":32,"start":3823}],"16626":[{"length":32,"start":3875}],"16628":[{"length":32,"start":3927}],"16630":[{"length":32,"start":3979}],"16632":[{"length":32,"start":4031}],"16634":[{"length":32,"start":4086}],"16636":[{"length":32,"start":4137}],"16639":[{"length":32,"start":4523}],"16642":[{"length":32,"start":4568}],"16645":[{"length":32,"start":4623}],"16648":[{"length":32,"start":4678}],"16651":[{"length":32,"start":4733}],"16654":[{"length":32,"start":4788}],"16657":[{"length":32,"start":4847}],"16660":[{"length":32,"start":4902}],"16662":[{"length":32,"start":4956}],"16664":[{"length":32,"start":4999}],"16666":[{"length":32,"start":5051}],"16668":[{"length":32,"start":5103}],"16670":[{"length":32,"start":5155}],"16672":[{"length":32,"start":5207}],"16674":[{"length":32,"start":5262}],"16676":[{"length":32,"start":5313}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816316f0115b146107735750806322acb86714610735578063313ce5671461071a57806347bcac3b1461068a57806354fd4d50146106505780637284e416146104fc5780637fe955d4146104685780639a6fc8f514610421578063af1296d3146103c4578063b9106c8f146102c0578063cd2c9e701461026b5763feaf968c146100a3575f80fd5b34610255575f600319360112610255576100c760246100c0610c6e565b929061091b565b93602073ffffffffffffffffffffffffffffffffffffffff8551938480927fe4dc2aa4000000000000000000000000000000000000000000000000000000008252807f000000000000000000000000000000000000000000000000000000000000000016868301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610261575f92610229575b50811561020357670de0b6b3a7640000948581029581870414901517156101d757506101bb8460015f937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60a098010401901515026114e9565b92805193828552602085015283015260608201525f6080820152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b9091506020813d602011610259575b81610245602093836107f4565b810103126102555751905f610161565b5f80fd5b3d9150610238565b84513d5f823e3d90fd5b5034610255575f600319360112610255576102bc906102a97f0000000000000000000000000000000000000000000000000000000000000000611350565b90519182916020835260208301906107c1565b0390f35b509034610255576020918260031936011261025557813573ffffffffffffffffffffffffffffffffffffffff8116809103610255578383918351928380927f313ce5670000000000000000000000000000000000000000000000000000000082525afa80156103ba575f90610382575b60ff9150166012811161035b5760120391601283116101d757604d83116101d757505190600a0a8152f35b827fd4f1d302000000000000000000000000000000000000000000000000000000005f525ffd5b508381813d83116103b3575b61039881836107f4565b81010312610255575160ff811681036102555760ff90610330565b503d61038e565b82513d5f823e3d90fd5b5034610255575f600319360112610255576103dd610c6e565b91805191818301918352805180925260608301916020809201915f5b82811061040d578580868960208301520390f35b8351855293810193928101926001016103f9565b509034610255576020600319360112610255573569ffffffffffffffffffff81160361025557805f60a09251918183528160208401528201525f60608201525f6080820152f35b5034610255575f600319360112610255576104a27f000000000000000000000000000000000000000000000000000000000000000061115b565b908051918291602090602080850191818652845180935285019301915f5b8281106104cf57505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff16855286955093810193928101926001016104c0565b5034610255575f6003193601126102555780515f5f549060018260011c9060018416938415610646575b602097888410861461061a57509187918694938286528386019690815f146105e0575060011461058a575b50505091610566601f92601f199403856107f4565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105ca575050508201018582601f19610551565b80548885018601528795509284019281016105b3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b83010190508582601f19610551565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610526565b5034610255575f60031936011261025557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610255576020806003193601126102555782359267ffffffffffffffff8411610255573660238501121561025557830135926106c784610844565b936106d4845195866107f4565b8085526024602086019160051b8301019136831161025557602401905b82821061070b576020856107048861091b565b9051908152f35b813581529083019083016106f1565b5034610255575f600319360112610255576020905160128152f35b5034610255575f600319360112610255576102bc906102a97f0000000000000000000000000000000000000000000000000000000000000000610eb8565b34610255575f6003193601126102555760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9081518082526020808093019301915f5b8281106107e0575050505090565b8351855293810193928101926001016107d2565b90601f601f19910116810190811067ffffffffffffffff82111761081757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116108175760051b60200190565b8051156108695760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600110156108695760400190565b8051600210156108695760600190565b8051600310156108695760800190565b8051600410156108695760a00190565b8051600510156108695760c00190565b8051600610156108695760e00190565b805160071015610869576101000190565b80518210156108695760209160051b010190565b7f00000000000000000000000000000000000000000000000000000000000000009061094682610eb8565b9173ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000166040948551917f535cfd8a0000000000000000000000000000000000000000000000000000000083526004928160048201525f8160248181987f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c4d575f91610bbb575b50602090610a2c92895180809581947f984de9e80000000000000000000000000000000000000000000000000000000083528d600484015260448301906107c1565b5f602483015203915afa968715610bb257505f96610b7e575b5093929190670de0b6b3a7640000945f945b848610610a7b57505050505050670de0b6b3a764000091610a7791611059565b0490565b909192939495610a8b8783610907565b515f8112610b5457610a9d8885610907565b51670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610b29578015610afe57600192610aeb670de0b6b3a764000093610af193610ae38d8a610907565b519104611099565b90611059565b0496019493929190610a57565b866012877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b866011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8590857fa8ce4432000000000000000000000000000000000000000000000000000000005f52525ffd5b9095506020813d602011610baa575b81610b9a602093836107f4565b810103126102555751945f610a45565b3d9150610b8d565b513d5f823e3d90fd5b90503d805f833e610bcc81836107f4565b81019060209081818403126102555780519067ffffffffffffffff821161025557019180601f84011215610255578251610c0581610844565b93610c128c5195866107f4565b818552838086019260051b820101928311610255578301905b828210610c3e5750505050610a2c6109ea565b81518152908301908301610c2b565b88513d5f823e3d90fd5b519069ffffffffffffffffffff8216820361025557565b7f000000000000000000000000000000000000000000000000000000000000000090610c998261115b565b90610ca383611350565b91610cad84610844565b604094610cbd60405192836107f4565b808252610cc981610844565b601f196020910136602085013782967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f955b848710610d0d5750505050505050565b9091929394959773ffffffffffffffffffffffffffffffffffffffff610d338a84610907565b511684518080927ffeaf968c00000000000000000000000000000000000000000000000000000000825260a092839160049384915afa928315610e7d575f925f94610e25575b5050610d8e610d888d88610907565b516114e9565b91828102927f800000000000000000000000000000000000000000000000000000000000000081145f831216610df95781840514901517156101d757509060019291610dda8c8b610907565b5280821015610df257505b9801959493929190610cfd565b9050610de5565b6011837f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b809294508193503d8311610e76575b610e3e81836107f4565b8101031261025557610e4f81610c57565b9187820151918781015192610e6b608060608401519301610c57565b94509250925f610d79565b503d610e34565b87513d5f823e3d90fd5b90610e9182610844565b610e9e60405191826107f4565b828152601f19610eae8294610844565b0190602036910137565b610ec181610e87565b907f0000000000000000000000000000000000000000000000000000000000000000610eec8361085c565b527f0000000000000000000000000000000000000000000000000000000000000000610f1783610896565b526002811115611055577f0000000000000000000000000000000000000000000000000000000000000000610f4b836108a6565b526003811115611055577f0000000000000000000000000000000000000000000000000000000000000000610f7f836108b6565b526004811115611055577f0000000000000000000000000000000000000000000000000000000000000000610fb3836108c6565b526005811115611055577f0000000000000000000000000000000000000000000000000000000000000000610fe7836108d6565b526006811115611055576007907f000000000000000000000000000000000000000000000000000000000000000061101e846108e6565b52116110275790565b7f0000000000000000000000000000000000000000000000000000000000000000611051826108f6565b5290565b5090565b8181029291811591840414171561106c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b670de0b6b3a7640000918083036110b05750905090565b8290671bc16d674ec8000081036110cd57505080610a7791611059565b673782dace9d90000081036110f157506110ea82610a7793611059565b0480611059565b90506110fc9161158f565b61271080820290828204148215171561106c5760017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93848301040190151502906001820180831161106c57811015611156575050505f90565b030190565b61116481610844565b9061117260405192836107f4565b808252601f1961118182610844565b013660208401376111918261085c565b9073ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001690526111d683610896565b7f000000000000000000000000000000000000000000000000000000000000000083169052600281111561134b5761120d836108a6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600381111561134b57611244836108b6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600481111561134b5761127b836108c6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600581111561134b576112b2836108d6565b7f000000000000000000000000000000000000000000000000000000000000000083169052600681111561134b576007906112ec846108e6565b837f00000000000000000000000000000000000000000000000000000000000000001690521161131a575090565b611323826108f6565b907f000000000000000000000000000000000000000000000000000000000000000016905290565b505090565b61135981610e87565b907f00000000000000000000000000000000000000000000000000000000000000006113848361085c565b527f00000000000000000000000000000000000000000000000000000000000000006113af83610896565b526002811115611055577f00000000000000000000000000000000000000000000000000000000000000006113e3836108a6565b526003811115611055577f0000000000000000000000000000000000000000000000000000000000000000611417836108b6565b526004811115611055577f000000000000000000000000000000000000000000000000000000000000000061144b836108c6565b526005811115611055577f000000000000000000000000000000000000000000000000000000000000000061147f836108d6565b526006811115611055576007907f00000000000000000000000000000000000000000000000000000000000000006114b6846108e6565b52116114bf5790565b7f0000000000000000000000000000000000000000000000000000000000000000611051826108f6565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116115135790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8015611558576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115611558570590565b908015611ebb578115611eb5578160ff1c611e8d57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611e655781670c7d713b49da00001280611e54575b15611af157670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611628908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302611585565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580611ade575b15611ab657819082121580611aa3575b15611a7b575f915f8112611a6c575b506064906806f05b59d3b20000008112611a09577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156119d0575b6856bc75e2d631000000811215611996575b682b5e3af16b1880000081121561195e575b6815af1d78b58c400000811215611926575b680ad78ebc5ac62000008112156118ef575b828112156118b8575b6802b5e3af16b1880000811215611881575b68015af1d78b58c4000081121561184a575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14611847576118479061153e565b90565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906117c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906117b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906117a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061179b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590611789565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590611777565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590611765565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001611753565b6803782dace9d90000008112611a59577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261173e565b68056bc75e2d631000008260019261173e565b600192505f03905060646116e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156116d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156116c3565b81670de0b6b3a7640000925f91848112611e3e575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611e13575b73011798004d755d3c8bc8e03204cf44619e000000821215611df2575b820290808302906e01855144814a7ff805980ff00840009081831215611dcf575b50506b02df0ab5a80a22c61ab5a70080821215611daf575b50693f1fce3da636ea5cf85080821215611d8f575b50690127fa27722cc06cc5e280821215611d6f575b5068280e60114edb805d0380821215611d4f575b50680ebc5fb4174612111080821215611d38575b506808f00f760a4b2db55d80821215611d18575b506806f5f177578893793780821215611cf8575b506806248f33704b28660380821215611cd9575b506805c548670b9510e7ac80821215611cba575b50611c6768056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102611585565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611cb5575f035b02611697565b611caf565b68056bc75e2d631000006756bc75e2d63100009202059101905f611c2b565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611c17565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611c03565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611bef565b68056bc75e2d63100000809202059101905f611bdb565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611bc7565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611bb3565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611b9e565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611b89565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611b71565b906b1425982cf597cd205cef73806803782dace9d900000091059101611b50565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611b33565b9050611e4a915061153e565b6001906064611b06565b50670f43fc2c04ee000082126115d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea264697066735822122015e49a56c787202970a9bfe333ac83010d0aec893ad0cf8201712b16072cbc8b64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16F0115B EQ PUSH2 0x773 JUMPI POP DUP1 PUSH4 0x22ACB867 EQ PUSH2 0x735 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x71A JUMPI DUP1 PUSH4 0x47BCAC3B EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x7284E416 EQ PUSH2 0x4FC JUMPI DUP1 PUSH4 0x7FE955D4 EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x9A6FC8F5 EQ PUSH2 0x421 JUMPI DUP1 PUSH4 0xAF1296D3 EQ PUSH2 0x3C4 JUMPI DUP1 PUSH4 0xB9106C8F EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xCD2C9E70 EQ PUSH2 0x26B JUMPI PUSH4 0xFEAF968C EQ PUSH2 0xA3 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0xC7 PUSH1 0x24 PUSH2 0xC0 PUSH2 0xC6E JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x91B JUMP JUMPDEST SWAP4 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP1 PUSH32 0x0 AND DUP7 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x261 JUMPI PUSH0 SWAP3 PUSH2 0x229 JUMPI JUMPDEST POP DUP2 ISZERO PUSH2 0x203 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1D7 JUMPI POP PUSH2 0x1BB DUP5 PUSH1 0x1 PUSH0 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xA0 SWAP9 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x14E9 JUMP JUMPDEST SWAP3 DUP1 MLOAD SWAP4 DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x259 JUMPI JUMPDEST DUP2 PUSH2 0x245 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x161 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x238 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x2BC SWAP1 PUSH2 0x2A9 PUSH32 0x0 PUSH2 0x1350 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x7C1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x255 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x255 JUMPI DUP4 DUP4 SWAP2 DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x3BA JUMPI PUSH0 SWAP1 PUSH2 0x382 JUMPI JUMPDEST PUSH1 0xFF SWAP2 POP AND PUSH1 0x12 DUP2 GT PUSH2 0x35B JUMPI PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x1D7 JUMPI PUSH1 0x4D DUP4 GT PUSH2 0x1D7 JUMPI POP MLOAD SWAP1 PUSH1 0xA EXP DUP2 MSTORE RETURN JUMPDEST DUP3 PUSH32 0xD4F1D30200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3B3 JUMPI JUMPDEST PUSH2 0x398 DUP2 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x255 JUMPI PUSH1 0xFF SWAP1 PUSH2 0x330 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x38E JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x3DD PUSH2 0xC6E JUMP JUMPDEST SWAP2 DUP1 MLOAD SWAP2 DUP2 DUP4 ADD SWAP2 DUP4 MSTORE DUP1 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD SWAP2 PUSH1 0x20 DUP1 SWAP3 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x40D JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3F9 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x255 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI CALLDATALOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0x255 JUMPI DUP1 PUSH0 PUSH1 0xA0 SWAP3 MLOAD SWAP2 DUP2 DUP4 MSTORE DUP2 PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x4A2 PUSH32 0x0 PUSH2 0x115B JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4CF JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4C0 JUMP JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x646 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x61A JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x5E0 JUMPI POP PUSH1 0x1 EQ PUSH2 0x58A JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x566 PUSH1 0x1F SWAP3 PUSH1 0x1F NOT SWAP5 SUB DUP6 PUSH2 0x7F4 JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x5CA JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x551 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x5B3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH1 0x1F NOT PUSH2 0x551 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x526 JUMP JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI DUP3 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x255 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x255 JUMPI DUP4 ADD CALLDATALOAD SWAP3 PUSH2 0x6C7 DUP5 PUSH2 0x844 JUMP JUMPDEST SWAP4 PUSH2 0x6D4 DUP5 MLOAD SWAP6 DUP7 PUSH2 0x7F4 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x255 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x70B JUMPI PUSH1 0x20 DUP6 PUSH2 0x704 DUP9 PUSH2 0x91B JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x6F1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH2 0x2BC SWAP1 PUSH2 0x2A9 PUSH32 0x0 PUSH2 0xEB8 JUMP JUMPDEST CALLVALUE PUSH2 0x255 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x255 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x7E0 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x7D2 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x817 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x817 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x869 JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x869 JUMPI PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x869 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x946 DUP3 PUSH2 0xEB8 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x40 SWAP5 DUP6 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 SWAP3 DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP2 SWAP9 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC4D JUMPI PUSH0 SWAP2 PUSH2 0xBBB JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH2 0xA2C SWAP3 DUP10 MLOAD DUP1 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x7C1 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP2 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xBB2 JUMPI POP PUSH0 SWAP7 PUSH2 0xB7E JUMPI JUMPDEST POP SWAP4 SWAP3 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH0 SWAP5 JUMPDEST DUP5 DUP7 LT PUSH2 0xA7B JUMPI POP POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0xA77 SWAP2 PUSH2 0x1059 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0xA8B DUP8 DUP4 PUSH2 0x907 JUMP JUMPDEST MLOAD PUSH0 DUP2 SLT PUSH2 0xB54 JUMPI PUSH2 0xA9D DUP9 DUP6 PUSH2 0x907 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH8 0xDE0B6B3A7640000 EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB29 JUMPI DUP1 ISZERO PUSH2 0xAFE JUMPI PUSH1 0x1 SWAP3 PUSH2 0xAEB PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0xAF1 SWAP4 PUSH2 0xAE3 DUP14 DUP11 PUSH2 0x907 JUMP JUMPDEST MLOAD SWAP2 DIV PUSH2 0x1099 JUMP JUMPDEST SWAP1 PUSH2 0x1059 JUMP JUMPDEST DIV SWAP7 ADD SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA57 JUMP JUMPDEST DUP7 PUSH1 0x12 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP7 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 SWAP1 DUP6 PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP6 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xBAA JUMPI JUMPDEST DUP2 PUSH2 0xB9A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI MLOAD SWAP5 PUSH0 PUSH2 0xA45 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xB8D JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xBCC DUP2 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x255 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x255 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x255 JUMPI DUP3 MLOAD PUSH2 0xC05 DUP2 PUSH2 0x844 JUMP JUMPDEST SWAP4 PUSH2 0xC12 DUP13 MLOAD SWAP6 DUP7 PUSH2 0x7F4 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x255 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC3E JUMPI POP POP POP POP PUSH2 0xA2C PUSH2 0x9EA JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xC2B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST MLOAD SWAP1 PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x255 JUMPI JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0xC99 DUP3 PUSH2 0x115B JUMP JUMPDEST SWAP1 PUSH2 0xCA3 DUP4 PUSH2 0x1350 JUMP JUMPDEST SWAP2 PUSH2 0xCAD DUP5 PUSH2 0x844 JUMP JUMPDEST PUSH1 0x40 SWAP5 PUSH2 0xCBD PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0xCC9 DUP2 PUSH2 0x844 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP6 JUMPDEST DUP5 DUP8 LT PUSH2 0xD0D JUMPI POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD33 DUP11 DUP5 PUSH2 0x907 JUMP JUMPDEST MLOAD AND DUP5 MLOAD DUP1 DUP1 SWAP3 PUSH32 0xFEAF968C00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0xA0 SWAP3 DUP4 SWAP2 PUSH1 0x4 SWAP4 DUP5 SWAP2 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE7D JUMPI PUSH0 SWAP3 PUSH0 SWAP5 PUSH2 0xE25 JUMPI JUMPDEST POP POP PUSH2 0xD8E PUSH2 0xD88 DUP14 DUP9 PUSH2 0x907 JUMP JUMPDEST MLOAD PUSH2 0x14E9 JUMP JUMPDEST SWAP2 DUP3 DUP2 MUL SWAP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH0 DUP4 SLT AND PUSH2 0xDF9 JUMPI DUP2 DUP5 SDIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1D7 JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH2 0xDDA DUP13 DUP12 PUSH2 0x907 JUMP JUMPDEST MSTORE DUP1 DUP3 LT ISZERO PUSH2 0xDF2 JUMPI POP JUMPDEST SWAP9 ADD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCFD JUMP JUMPDEST SWAP1 POP PUSH2 0xDE5 JUMP JUMPDEST PUSH1 0x11 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SWAP3 SWAP5 POP DUP2 SWAP4 POP RETURNDATASIZE DUP4 GT PUSH2 0xE76 JUMPI JUMPDEST PUSH2 0xE3E DUP2 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x255 JUMPI PUSH2 0xE4F DUP2 PUSH2 0xC57 JUMP JUMPDEST SWAP2 DUP8 DUP3 ADD MLOAD SWAP2 DUP8 DUP2 ADD MLOAD SWAP3 PUSH2 0xE6B PUSH1 0x80 PUSH1 0x60 DUP5 ADD MLOAD SWAP4 ADD PUSH2 0xC57 JUMP JUMPDEST SWAP5 POP SWAP3 POP SWAP3 PUSH0 PUSH2 0xD79 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE34 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0xE91 DUP3 PUSH2 0x844 JUMP JUMPDEST PUSH2 0xE9E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x7F4 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xEAE DUP3 SWAP5 PUSH2 0x844 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH2 0xEC1 DUP2 PUSH2 0xE87 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xEEC DUP4 PUSH2 0x85C JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0xF17 DUP4 PUSH2 0x896 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xF4B DUP4 PUSH2 0x8A6 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xF7F DUP4 PUSH2 0x8B6 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xFB3 DUP4 PUSH2 0x8C6 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0xFE7 DUP4 PUSH2 0x8D6 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x101E DUP5 PUSH2 0x8E6 JUMP JUMPDEST MSTORE GT PUSH2 0x1027 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x1051 DUP3 PUSH2 0x8F6 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x106C JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x10B0 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x10CD JUMPI POP POP DUP1 PUSH2 0xA77 SWAP2 PUSH2 0x1059 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x10F1 JUMPI POP PUSH2 0x10EA DUP3 PUSH2 0xA77 SWAP4 PUSH2 0x1059 JUMP JUMPDEST DIV DUP1 PUSH2 0x1059 JUMP JUMPDEST SWAP1 POP PUSH2 0x10FC SWAP2 PUSH2 0x158F JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x106C JUMPI PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x106C JUMPI DUP2 LT ISZERO PUSH2 0x1156 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST PUSH2 0x1164 DUP2 PUSH2 0x844 JUMP JUMPDEST SWAP1 PUSH2 0x1172 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x7F4 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x1F NOT PUSH2 0x1181 DUP3 PUSH2 0x844 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH2 0x1191 DUP3 PUSH2 0x85C JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP1 MSTORE PUSH2 0x11D6 DUP4 PUSH2 0x896 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x120D DUP4 PUSH2 0x8A6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x1244 DUP4 PUSH2 0x8B6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x127B DUP4 PUSH2 0x8C6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH2 0x12B2 DUP4 PUSH2 0x8D6 JUMP JUMPDEST PUSH32 0x0 DUP4 AND SWAP1 MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x134B JUMPI PUSH1 0x7 SWAP1 PUSH2 0x12EC DUP5 PUSH2 0x8E6 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP1 MSTORE GT PUSH2 0x131A JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x1323 DUP3 PUSH2 0x8F6 JUMP JUMPDEST SWAP1 PUSH32 0x0 AND SWAP1 MSTORE SWAP1 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1359 DUP2 PUSH2 0xE87 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1384 DUP4 PUSH2 0x85C JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x13AF DUP4 PUSH2 0x896 JUMP JUMPDEST MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x13E3 DUP4 PUSH2 0x8A6 JUMP JUMPDEST MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x1417 DUP4 PUSH2 0x8B6 JUMP JUMPDEST MSTORE PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x144B DUP4 PUSH2 0x8C6 JUMP JUMPDEST MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH32 0x0 PUSH2 0x147F DUP4 PUSH2 0x8D6 JUMP JUMPDEST MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x1055 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH2 0x14B6 DUP5 PUSH2 0x8E6 JUMP JUMPDEST MSTORE GT PUSH2 0x14BF JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x1051 DUP3 PUSH2 0x8F6 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1513 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x1558 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x1558 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1EBB JUMPI DUP2 ISZERO PUSH2 0x1EB5 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1E8D JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1E65 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1E54 JUMPI JUMPDEST ISZERO PUSH2 0x1AF1 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1628 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x1585 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x1ADE JUMPI JUMPDEST ISZERO PUSH2 0x1AB6 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x1AA3 JUMPI JUMPDEST ISZERO PUSH2 0x1A7B JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x1A6C JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x1A09 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x19D0 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x1996 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x195E JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1926 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x18EF JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x18B8 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x1881 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x184A JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x1847 JUMPI PUSH2 0x1847 SWAP1 PUSH2 0x153E JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x17C8 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x17B6 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x17A4 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x179B JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1789 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1777 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1765 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x1753 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x1A59 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x173E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x173E JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x16E2 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x16D3 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x16C3 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1E3E JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1E13 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1DF2 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1DCF JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1DAF JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1D8F JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1D6F JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1D4F JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1D38 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1D18 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1CF8 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1CD9 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1CBA JUMPI JUMPDEST POP PUSH2 0x1C67 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x1585 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1CB5 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x1697 JUMP JUMPDEST PUSH2 0x1CAF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1C2B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1C17 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1C03 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BEF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BDB JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BC7 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1BB3 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B9E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B89 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1B71 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1B50 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1B33 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E4A SWAP2 POP PUSH2 0x153E JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x1B06 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x15D5 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xE4 SWAP11 JUMP 0xC7 DUP8 KECCAK256 0x29 PUSH17 0xA9BFE333AC83010D0AEC893AD0CF820171 0x2B AND SMOD 0x2C 0xBC DUP12 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"436:492:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;7409:20:72;436:492:78;7371:13:72;;:::i;:::-;7409:20;;;:::i;:::-;436:492:78;7461:33:72;436:492:78;;;7461:33:72;;;;436:492:78;7461:33:72;;7488:4;;436:492:78;7461:33:72;;;436:492:78;7461:6:72;436:492:78;7461:33:72;;;;;;;436:492:78;7461:33:72;;;436:492:78;2004:6:38;;;2000:58;;465:4;436:492:78;;;;;;;;;;;;;;;2560:120:38;7567:18:72;2560:120:38;;436:492:78;2560:120:38;;436:492:78;2560:120:38;;;;;;;;7567:18:72;:::i;:::-;436:492:78;;;;;;;7461:33:72;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;2000:58:38;2033:14;436:492:78;2033:14:38;436:492:78;2033:14:38;7461:33:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;436:492:78;;;;;7461:33:72;;;;436:492:78;;;;7461:33:72;;;-1:-1:-1;7461:33:72;;;436:492:78;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;11339:12:72;11304:48;11339:12;11304:48;:::i;:::-;436:492:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;;;;;;;;11661:15:72;;;;436:492:78;11661:15:72;;;;;;;;436:492:78;11661:15:72;;;436:492:78;;;;;1234:2:72;11691:28;;11687:87;;1234:2;436:492:78;;1234:2:72;436:492:78;;;;;;;;;;;;;;;;;11687:87:72;11742:21;;436:492:78;11742:21:72;436:492:78;11742:21:72;11661:15;;;;;;;;;;;;;;;:::i;:::-;;;436:492:78;;;;;;;;;;;;;11661:15:72;;;;;;;;;436:492:78;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;11127:23:72;11137:12;11127:23;:::i;:::-;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;-1:-1:-1;;;436:492:78;;;;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;-1:-1:-1;436:492:78;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;5301:8:72;436:492:78;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;1234:2:72;436:492:78;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;11495:12:72;11483:25;11495:12;11483:25;:::i;436:492:78:-;;;;;-1:-1:-1;;436:492:78;;;;;;1281:35:72;436:492:78;1281:35:72;436:492:78;;;;;;;;;;;;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;436:492:78;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;465:4:38:-;436:492:78;;465:4:38;;;;;;:::o;:::-;;14297:1:72;465:4:38;;;;;14297:1:72;465:4:38;;436:492:78;;14332:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;14377:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;14462:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;14547:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;14632:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;14717:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;14802:1:72;465:4:38;;;;;;;:::o;:::-;436:492:78;;465:4:38;;;;;;;;;;;;:::o;7655:2593:72:-;7767:12;7817:24;;;;:::i;:::-;436:492:78;;7933:4:72;;436:492:78;;;;;7895:44:72;436:492:78;7895:44:72;;;;;;;;436:492:78;7895:44:72;436:492:78;;;;7895:6:72;;436:492:78;7895:44:72;;;;;;;;;;;7655:2593;436:492:78;;;;;;;9957:66:72;;;;;436:492:78;9957:66:72;;;7895:44;9957:66;;436:492:78;;;;;;:::i;:::-;7895:44:72;436:492:78;;;;9957:66:72;;;;;;;;;;7895:44;9957:66;;;7655:2593;10034:20;;;;;465:4:38;10069:13:72;7895:44;10064:147;10084:15;;;;;;838:5:38;;;;;;465:4;838:5;;;;:::i;:::-;436:492:78;7655:2593:72;:::o;10101:3::-;10138:9;;;;;;;;;;:::i;:::-;465:4:38;7895:44:72;17245:9:59;;17241:81;;10168:10:72;;;;:::i;:::-;465:4:38;;436:492:78;;;;;;465:4:38;436:492:78;;;;;;;;;;;;10188:10:72;10138:61;465:4:38;10188:10:72;838:5:38;10188:10:72;;;;;:::i;:::-;465:4:38;436:492:78;;10138:61:72;:::i;:::-;838:5:38;;:::i;:::-;436:492:78;10101:3:72;465:4:38;10069:13:72;;;;;;;436:492:78;;;;;7895:44:72;436:492:78;;7895:44:72;436:492:78;;;;;;7895:44:72;436:492:78;;7895:44:72;436:492:78;17241:81:59;17277:34;;;;7895:44:72;17277:34:59;436:492:78;7895:44:72;17277:34:59;9957:66:72;;;;436:492:78;9957:66:72;;436:492:78;9957:66:72;;;;;;436:492:78;9957:66:72;;;:::i;:::-;;;436:492:78;;;;;9957:66:72;;;;;;;-1:-1:-1;9957:66:72;;;436:492:78;;7895:44:72;436:492:78;;;;;7895:44:72;;;;;;;;;;;;:::i;:::-;;;436:492:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;7895:44:72;;;;436:492:78;7895:44:72;;436:492:78;;;;;;;;;;;;;7895:44:72;436:492:78;;;7895:44:72;436:492:78;;;;;;;;;;;;;;;:::o;10292:699:72:-;10411:12;10472:22;;;;:::i;:::-;10549:47;;;;:::i;:::-;436:492:78;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;436:492:78;;;;;;;;10607:34:72;10652:29;10664:17;10696:13;-1:-1:-1;10691:294:72;10711:15;;;;;;10292:699;;;;;;;:::o;10728:3::-;10794:8;;;;;;;436:492:78;10794:8:72;;;;:::i;:::-;436:492:78;;;;10794:26:72;;;436:492:78;10794:26:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;;10794:26:72;;10728:3;10855:28;;:39;:28;;;;:::i;:::-;465:4:38;10855:39:72;:::i;:::-;436:492:78;;;;;;;;-1:-1:-1;436:492:78;;;;;;;;;;;;;;;10834:60:72;;465:4:38;10834:60:72;;;;;;:::i;:::-;436:492:78;10921:25:72;;;;;;:53;;10728:3;465:4:38;10696:13:72;;;;;;;;10921:53;;;;;436:492:78;;;;-1:-1:-1;436:492:78;;;-1:-1:-1;436:492:78;10794:26:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;436:492:78;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10794:26:72;;;;;;;;;;;;;;436:492:78;;;-1:-1:-1;436:492:78;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;436:492:78;;;;:::i;:::-;;;;;;;;:::o;14091:781:72:-;14211:26;;;:::i;:::-;14302:8;;14289:21;;;:::i;:::-;436:492:78;14337:8:72;14324:21;;;:::i;:::-;436:492:78;14377:1:72;14363:15;;14377:1;;;14395:8;14382:21;;;:::i;:::-;436:492:78;14462:1:72;14448:15;;14462:1;;;14480:8;14467:21;;;:::i;:::-;436:492:78;14547:1:72;14533:15;;14547:1;;;14565:8;14552:21;;;:::i;:::-;436:492:78;14632:1:72;14618:15;;14632:1;;;14650:8;14637:21;;;:::i;:::-;436:492:78;14717:1:72;14703:15;;14717:1;;;14802;14735:8;;14722:21;;;:::i;:::-;436:492:78;14788:15:72;14784:47;;14091:781;:::o;14784:47::-;14820:8;14807:21;;;:::i;:::-;436:492:78;14091:781:72;:::o;14699:72::-;14754:14;;:::o;436:492:78:-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;3736:794:38;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;436:492:78;4028:8:38;;436:492:78;;838:5:38;;;;;;:::i;4024:500::-;436:492:78;4093:9:38;;436:492:78;;838:5:38;;;;;;:::i;:::-;436:492:78;838:5:38;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;638:5;436:492:78;;;;;;;;;;;;;;;1186:122:38;;;;;;;;;;;638:5;436:492:78;638:5:38;;;;;;;4347:14;;;;;4381:8;;;436:492:78;4381:8:38;:::o;4343:171::-;638:5;;4460:21;:::o;11840:823:72:-;436:492:78;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;436:492:78;;;:::i;:::-;;;;;;;12084:22:72;;;:::i;:::-;436:492:78;;12095:11:72;;;436:492:78;;;12120:22:72;;;:::i;:::-;12131:11;436:492:78;;;;12174:1:72;12160:15;;12174:1;;;12179:22;;;:::i;:::-;12190:11;436:492:78;;;;12258:1:72;12244:15;;12258:1;;;12263:22;;;:::i;:::-;12274:11;436:492:78;;;;12342:1:72;12328:15;;12342:1;;;12347:22;;;:::i;:::-;12358:11;436:492:78;;;;12426:1:72;12412:15;;12426:1;;;12431:22;;;:::i;:::-;12442:11;436:492:78;;;;12510:1:72;12496:15;;12510:1;;;12594;12515:22;;;;:::i;:::-;12526:11;;436:492:78;;;12580:15:72;12576:48;;12644:12;11840:823;:::o;12576:48::-;12599:22;;;:::i;:::-;12610:11;;436:492:78;;;11840:823:72;:::o;12492:71::-;12548:12;;;:::o;12669:1416::-;12835:26;;;:::i;:::-;12949:31;;12913:67;;;:::i;:::-;436:492:78;13030:31:72;12994:67;;;:::i;:::-;436:492:78;13093:1:72;13079:15;;13093:1;;;13134:31;13098:67;;;:::i;:::-;436:492:78;13264:1:72;13250:15;;13264:1;;;13305:31;13269:67;;;:::i;:::-;436:492:78;13434:1:72;13420:15;;13434:1;;;13475:31;13439:67;;;:::i;:::-;436:492:78;13604:1:72;13590:15;;13604:1;;;13645:31;13609:67;;;:::i;:::-;436:492:78;13775:1:72;13761:15;;13775:1;;;13946;13816:31;;13780:67;;;:::i;:::-;436:492:78;13932:15:72;13928:93;;12669:1416;:::o;13928:93::-;13987:31;13951:67;;;:::i;34375:314:59:-;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;436:492:78;;34608:34:59;;2648:13:39;;;;;;;;:::o;:::-;436:492:78;;;;;;;;;2648:13:39;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;1564:4;436:492:78;1564:4:39;5129:68;;436:492:78;5591:24:39;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;436:492:78;7316:5:39;436:492:78;7316:5:39;;7312:417;;5770:720;-1:-1:-1;9497:3:39;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;:::-;4496:2300;:::o;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:39;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;436:492:78;4181:19:39;;-1:-1:-1;9497:3:39;7312:417;;7074:112;7158:17;436:492:78;7158:17:39;;436:492:78;7158:17:39;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;436:492:78;6715:20:39;;436:492:78;6715:20:39;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;436:492:78;14954:10:39;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;436:492:78;2648:13:39;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;436:492:78;4181:19:39;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;436:492:78;5638:21:39;;436:492:78;5638:21:39;5129:68;5169:17;436:492:78;5169:17:39;;436:492:78;5169:17:39;4714:45;4740:8;;436:492:78;4740:8:39;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o"},"methodIdentifiers":{"calculateFeedTokenDecimalScalingFactor(address)":"b9106c8f","calculateTVL(int256[])":"47bcac3b","decimals()":"313ce567","description()":"7284e416","getFeedData()":"af1296d3","getFeedTokenDecimalScalingFactors()":"cd2c9e70","getFeeds()":"7fe955d4","getRoundData(uint80)":"9a6fc8f5","getWeights()":"22acb867","latestRoundData()":"feaf968c","pool()":"16f0115b","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"contract IWeightedPool\",\"name\":\"pool_\",\"type\":\"address\"},{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"feeds\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"version_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"feed\",\"type\":\"address\"}],\"name\":\"calculateFeedTokenDecimalScalingFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"prices\",\"type\":\"int256[]\"}],\"name\":\"calculateTVL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tvl\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedData\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"prices\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeedTokenDecimalScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeds\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"contract IWeightedPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{\"calculateTVL(int256[])\":{\"details\":\"Prices are defined the same way as in the oracle feed, and scaled to 18-decimal FP values.\",\"params\":{\"prices\":\"An array of prices for the tokens in the pool\"},\"returns\":{\"tvl\":\"TVL calculated from the prices and current weights\"}},\"decimals()\":{\"details\":\"Declared in AggregatorV3Interface.This is hard-coded to 18 decimals.\",\"returns\":{\"_0\":\"decimals The number of decimals\"}},\"description()\":{\"details\":\"Declared in AggregatorV3Interface.\",\"returns\":{\"_0\":\"description The description as a string\"}},\"getFeedData()\":{\"returns\":{\"prices\":\"An array of latest prices from the feeds\",\"updatedAt\":\"The timestamp of the last update\"}},\"getFeedTokenDecimalScalingFactors()\":{\"returns\":{\"_0\":\"An array of scaling factors corresponding to each feed.\"}},\"getFeeds()\":{\"returns\":{\"_0\":\"An array of AggregatorV3Interface instances representing the feeds.\"}},\"getRoundData(uint80)\":{\"details\":\"Declared in AggregatorV3Interface. This is unused, and always returns all zeros.\",\"returns\":{\"answer\":\"The answer for this round\",\"answeredInRound\":\"[Deprecated] - Previously used when answers could take multiple rounds to be computed\",\"roundId\":\"The round ID\",\"startedAt\":\"Timestamp when the round started\",\"updatedAt\":\"Timestamp when the round was updated\"}},\"getWeights()\":{\"returns\":{\"_0\":\"An array of weights corresponding to each token in the pool.\"}},\"latestRoundData()\":{\"details\":\"Declared in AggregatorV3Interface.\",\"returns\":{\"answer\":\"The answer for this round\",\"answeredInRound\":\"[Deprecated] - Previously used when answers could take multiple rounds to be computed\",\"roundId\":\"The round ID\",\"startedAt\":\"Timestamp when the round started\",\"updatedAt\":\"Timestamp when the round was updated\"}},\"version()\":{\"details\":\"Declared in AggregatorV3Interface.\",\"returns\":{\"_0\":\"version The numerical version number\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{\"calculateTVL(int256[])\":{\"notice\":\"Calculates the tvl based on the provided prices.\"},\"decimals()\":{\"notice\":\"Get the number of decimals present in the response value.\"},\"description()\":{\"notice\":\"Get the description of the underlying aggregator that the proxy points to.\"},\"getFeedData()\":{\"notice\":\"Gets the latest feed data.\"},\"getFeedTokenDecimalScalingFactors()\":{\"notice\":\"Gets the decimal scaling factors for each feed token.\"},\"getFeeds()\":{\"notice\":\"Gets the list of feeds used by the oracle.\"},\"getRoundData(uint80)\":{\"notice\":\"Get data about a specific round, using the roundId.\"},\"getWeights()\":{\"notice\":\"Gets the current weights of the tokens in the pool.\"},\"latestRoundData()\":{\"notice\":\"Get the data from the latest round.\"},\"version()\":{\"notice\":\"Get the version of the oracle.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/WeightedLPOracleMock.sol\":\"WeightedLPOracleMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IWeightedLPOracle.sol\":{\"keccak256\":\"0xab6ca6305d0ca426f5b456925e487a9e0bbd41b77d9bf3a4321296459a1b586f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7bf6bb63d1fdf1d2ba6cf6835b36f201aaf36092f80185774d123494ee3c9fdf\",\"dweb:/ipfs/QmeN9rfPZtGQrFo5mDG144Vz48GWGDQCqXeQ8WaKTDXCMk\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x257a8d28fa83d3d942547c8e129ef465e4b5f3f31171e7be4739a4c98da6b4f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d39e11b1dc7b9b8ccdabbc9be442ab7cda4a81c748f57e316dcb1bcb4a28bf9\",\"dweb:/ipfs/QmaG6vz6W6iEUBsbHSBob5mdcitYxWjoygxREHpsJHfWrS\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/WeightedLPOracle.sol\":{\"keccak256\":\"0xd40cc2c85ee6c7c3432ebb1b70f6b3979b4c30f6de146ef839cdc9857ade3689\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://60cd9f72384bfaab5add9fc8e99d140745132574cf07a1188338091db43b861c\",\"dweb:/ipfs/Qma1eaCo7r9pDi9SN9PKTP4t9616HFKVczess8b4Thxooe\"]},\"contracts/test/WeightedLPOracleMock.sol\":{\"keccak256\":\"0xd7ff47e419246606049c2a0d712141faeeb40a5fa86b61ac73237bd1ca2cf496\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://95c6a7e2452a325cc3e6ec8b6e30e4b71a41fa63daad1d3f950cfcbd13afd642\",\"dweb:/ipfs/QmcSsUFpp59NmnEQXdA5gavpKN9HRcGMj2Cf1Kjd4VuvJU\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/v3/tasks/20250605-v3-weighted-lp-oracle/index.ts b/v3/tasks/20250605-v3-weighted-lp-oracle/index.ts new file mode 100644 index 000000000..da09aa03d --- /dev/null +++ b/v3/tasks/20250605-v3-weighted-lp-oracle/index.ts @@ -0,0 +1,10 @@ +import { WeightedLPOracleDeployment } from './input'; +import { Task, TaskRunOptions } from '@src'; + +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as WeightedLPOracleDeployment; + + const args = [input.Vault, input.Version]; + await task.deployAndVerify('WeightedLPOracleFactory', args, from, force); +}; diff --git a/v3/tasks/20250605-v3-weighted-lp-oracle/input.ts b/v3/tasks/20250605-v3-weighted-lp-oracle/input.ts new file mode 100644 index 000000000..557f07266 --- /dev/null +++ b/v3/tasks/20250605-v3-weighted-lp-oracle/input.ts @@ -0,0 +1,14 @@ +import { Task, TaskMode } from '@src'; + +export type WeightedLPOracleDeployment = { + Vault: string; + Version: string; +}; + +const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); +const Version = 1; + +export default { + Vault, + Version, +}; diff --git a/v3/tasks/20250605-v3-weighted-lp-oracle/readme.md b/v3/tasks/20250605-v3-weighted-lp-oracle/readme.md new file mode 100644 index 000000000..5b44adefd --- /dev/null +++ b/v3/tasks/20250605-v3-weighted-lp-oracle/readme.md @@ -0,0 +1,9 @@ +# 2025-06-05 - V3 Weighted LP Oracle + +Contains `WeightedLPOracleFactory` //TODO + + +## Useful Files + +- [Code](https://github.com/balancer/balancer-v3-monorepo/commit/TBD). +- [`WeightedLPOracleFactory` artifact](./artifact/WeightedLPOracle.json) \ No newline at end of file diff --git a/v3/tasks/20250605-v3-weighted-lp-oracle/test/task.fork.ts b/v3/tasks/20250605-v3-weighted-lp-oracle/test/task.fork.ts new file mode 100644 index 000000000..9de6bdae3 --- /dev/null +++ b/v3/tasks/20250605-v3-weighted-lp-oracle/test/task.fork.ts @@ -0,0 +1,59 @@ +import hre from 'hardhat'; +import { Contract } from 'ethers'; +import * as expectEvent from '@helpers/expectEvent'; +import { describeForkTest, getForkedNetwork, getSigner, impersonate, Task, TaskMode } from '@src'; +import { fp } from '@helpers/numbers'; +import { WeightedLPOracleDeployment } from '../input'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { expect } from 'chai'; + +describeForkTest('WeightedLPOracle', 'mainnet', 22647247, function () { + let task: Task; + let input: WeightedLPOracleDeployment; + let weightedLPOracleFactory: Contract; + let authorizer: Contract; + + const POOL = '0xecD2978447367eC0c944Af58C3B8a7b52Acfd7a4'; // 1ROR / WETH + const PRICE_FEED = [ + // AAVE/USD price feed (we use AAVE because there is no 1ROR/USD price feed) + '0x547a514d5e3769680Ce22B2361c10Ea13619e8a9', + // ETH/USD price feed + '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419', + ]; + let admin: SignerWithAddress; + + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + + before('run task', async () => { + task = new Task('20250605-v3-weighted-lp-oracle', TaskMode.TEST, getForkedNetwork(hre)); + await task.run({ force: true }); + }); + + before('setup contracts and signers', async () => { + admin = await getSigner(); + + weightedLPOracleFactory = await task.deployedInstance('WeightedLPOracleFactory'); + + const authorizerTask = new Task('20210418-authorizer', TaskMode.READ_ONLY, getForkedNetwork(hre)); + authorizer = await authorizerTask.deployedInstance('Authorizer'); + + const govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + await authorizer + .connect(govMultisig) + .grantRole( + await weightedLPOracleFactory.getActionId(weightedLPOracleFactory.interface.getSighash('create')), + admin.address + ); + + input = task.input() as WeightedLPOracleDeployment; + }); + + it('should deploy WeightedLPOracleFactory', async () => { + const receipt = await (await weightedLPOracleFactory.connect(admin).create(POOL, PRICE_FEED)).wait(); + const event = expectEvent.inReceipt(receipt, 'WeightedLPOracleCreated'); + const oracleAddress = event.args.oracle; + + const oracle = await task.instanceAt('WeightedLPOracle', oracleAddress); + expect((await oracle.latestRoundData()).answer > BigInt(0)).to.be.true; + }); +});